cmakelist
终于,又得自己写cmakelist了。
一句题外话,clion默认识别cmakelist。
之前跟着练手的博文是这个。
https://www.hahack.com/codes/cmake/
Demo 1
- 0 文件结构
------ main.c
|--- CMakeLists.txt
- 1.1 文件名
CMakeLists.txt
- 1.2 cmake最低版本信息
cmake_minimum_required(VERSION 2.8)
不同cmake支持的功能不同,理解为向下兼容,所以某个版本可以用,之后的版本均可以用
提供最低版本号
- 1.3 项目名
project(Test1)
项目名称,目前没看到用的地方
- 2 源码文件,链接到执行文件
add_executable(Test main.c)
执行文件的名字为Test,编译main.c得到
- 3.1 生成cmake相关文件
#CMakeLists.txt同级目录 mkdir build cd build cmake .. #此时cmake相关文件均在build文件夹,易于处理
生成CMakeCache.txt,CMakeFiles文件夹,Makefile,cmake_install.cmake
- 3.2 make
#同在build目录下,根据Makefile make
生成可执行文件Test
Demo 2
- 0 文件结构
------ main.c
|--- CMakeLists.txt
|--- MathFunctions.c
|--- MathFunctions.h
- 1.1 多个源码文件,链接到执行文件
add_executable(Test main.c MathFunctions.c)
#执行文件的名字为Test,编译main.c,MathFunctions.c
执行文件的名字为Test,编译main.c,MathFunctions.c
- 2.1 将指定目录下的源码文件保存到变量
aux_source_directory(. CUR_C)
.为当前目录
查找当前目录下的所有源文件,并将名称保存到DIR_SRCS变量
- 2.2 从变量读入源码文件,链接到执行文件
add_executable(Test ${CUR_C})
Demo 3
- 0 文件结构
------ main.c
|--- CMakeLists.txt
|--- math/
|-------- CMakeLists.txt
|-------- MathFunctions.c
|-------- MathFunctions.h
- 1.1 math目录下,CMakeLists.txt
aux_source_directory(. MATH_C) #查找当前目录下的所有源文件,并将名称保存到MATH_C变量 #${MATH_C} = MathFunctions.c add_library(MathFunctions ${MATH_C}) #生成链接库
- 1.2 math目录下,测试:cmake
cmake .
生成CMakeFiles文件夹,Makefile,cmake_install.cmake
- 1.3 math目录下,测试:make
make
生成libMathFunctions.a
- 2.1 一级目录CMakeLists.txt,源码文件保存到变量
aux_source_directory(. CUR_C)
#查找当前目录下的所有源文件,并将名称保存到CUR_C变量
- 2.2 一级目录CMakeLists.txt,包含头文件路径
include_directories("${PROJECT_SOURCE_DIR}/common") #PROJECT_SOURCE_DIR,包含project命令的CMakeLists.txt所在文件夹 #CMAKE_SOURCE_DIR,顶级CMakeLists.txt所在文件夹
两个宏均为cmake定义
- 2.3 一级目录CMakeLists.txt,添加math子目录
add_subdirectory(math)
#添加math子目录
#读该目录的CMakeLists.txt
- 2.4 一级目录CMakeLists.txt,生成执行文件,链接一级目录下的库文件
add_executable(Test ${CUR_C})
#指定生成目标
- 2.5 一级目录CMakeLists.txt,链接二级目录下的库文件
target_link_libraries(Test MathFunctions)
#添加链接库
- 3.1 build目录下,cmake
一级目录下生成CMakeCache.txt,CMakeFiles文件夹,Makefile,cmake_install.cmake
math目录下生成CMakeFiles文件夹,Makefile,cmake_install.cmake
- 3.2 不同CMakeLists.txt的变量命名问题
当前目录是否可以和上级目录变量同名:不可以
在解析一个CMakeList.txt时,又解析另一个CMakeList.txt文件,此时变量重叠;
而且第一个CUR_C有main.c,第二个使用CUR_C时,当前目录甚至找不到main.c,报错
- 3.3 build目录下,make
math下生成libMathFunctions.a
当前目录下生成可执行文件Test
Demo 4 - draft
- 0 文件结构
------ main.c
|--- CMakeLists.txt
|--- config.h.in
|--- math/
|-------- CMakeLists.txt
|-------- MathFunctions.c
|-------- MathFunctions.h
- 1.1 config.h.in 定义宏
#cmakedefine USE_MTMATH
选择用自己的还是标准的mathFunc
- 1.2 修改main.c
#include “config.h” #ifdef USE_MYMATH #include “math/MathFunctions.h” #else #include <math.h> #endif #ifdef USE_MYMATH //调用power #else //调用pow #endif
设置走向
posted on 2021-04-12 17:59 toughcactus 阅读(730) 评论(0) 编辑 收藏 举报