赞
踩
基于上一篇的基础上,再次升级
基于 cmake 指定源文件目录可以是多个文件夹,多层目录
ubuntu 20.04 + cmake-3.23.1
工程目录如下
顶层脚本 compile.sh 负责执行 cmake 操作,顶层的 CMakeLists.txt 很关键,指定了源文件路径,其中每个文件夹中都放置了一个CMakeLists.txt 文件,语法要求,否者会报错。
顶层 CMakeLists.txt
- # Top 顶层 Cmake
- cmake_minimum_required(VERSION 2.8.11)
-
- # 添加子路径 cmake 执行调用对应子路径的 cmake
- add_subdirectory(./src)
- add_subdirectory(./src/func1/)
- add_subdirectory(./src/func2/)
-
- # 编译过程打印信息
- message("top cmake show message") # 打印信息
- #message(SEND_ERROR "Error Show") # 打印错误信息 可以显示当前位置行数
-
- # 定义工程名 暂时未见起作用
- project(projectName)
-
- # 指定编译工具 X86 还是 ARM
- #SET(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
- set(CMAKE_CXX_COMPILER g++)
-
- # 指定源代码文件目录别称
- set(SRC_DIR ${PROJECT_SOURCE_DIR}/src)
- set(SRC_FUNC1_DIR ${PROJECT_SOURCE_DIR}/src/func1)
- set(SRC_FUNC2_DIR ${PROJECT_SOURCE_DIR}/src/func2)
-
- # 指定生成的可执行文件名
- set(EXE_FILE_NAME mainFile)
-
- # 添加 include 包含路径 否则在源代码中引用头文件需要指定完整路径
- include_directories(${PROJECT_SOURCE_DIR})
- include_directories(${PROJECT_SOURCE_DIR}/src/func1/)
- include_directories(${PROJECT_SOURCE_DIR}/src/func2/)
-
- # 添加执行文件 1、多次调用 可以生成多个可执行文件
- add_executable(
- # 生成文件
- ${EXE_FILE_NAME}
-
- # main 函数所在目录
- ${SRC_DIR}/main.cpp
-
- # 测试功能文件夹1
- ${SRC_FUNC1_DIR}/func1.cpp
-
- # 测试功能文件夹2
- ${SRC_FUNC2_DIR}/func2.cpp
- )
-
src CMakeLists.txt
- # src Cmake
- cmake_minimum_required(VERSION 2.8.11)
-
- # 编译过程打印信息
- message("src cmake show message") # 打印信息
func1 CMakeLists.txt
- # func1 Cmake
- cmake_minimum_required(VERSION 2.8.11)
-
- # 编译过程打印信息
- message("func1 cmake show message") # 打印信息
func2 CMakeLists.txt
- # func2 Cmake
- cmake_minimum_required(VERSION 2.8.11)
-
- # 编译过程打印信息
- message("func2 cmake show message") # 打印信息
main.c
- #include <stdio.h>
-
- #include "func1.h"
- #include "func2.h"
-
- int main(int argc, char* argv[])
- {
- printf("%s hello cmake\r\n", __func__);
-
- /* 外调文件功能 */
- Func1_Test();
- Func2_Test();
-
- return 0;
- }
func 中的函数就是 Func_Test(); 和 Func2_Test(); ,这里就不展示了
compile.sh 文件如下:
- #!/bin/bash
-
- echo "compile file"
-
- if [ ! -d "./build/" ]; then
-
- # 没有文件夹 创建文件夹
- echo "no build direct"
- mkdir build
-
- else
-
- # 存在文件夹 删除文件夹内容
- echo "already build direct"
- rm ./build/* -r
-
- fi
-
- cmake -B build
./compile.sh
执行 make
- cd build
- make
执行可执行程序
./mainFile
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。