详细
1.编译链接
project(vins) #工程名
1. add_executable(vins main.cc vins.cc) #用main.cc vins.cc生成vins可执行文件
aux_source_directory(<dir> <variable>) #更省事的方法是使用 aux_source_directory 命令,该命令会查找指定目录下的所有源文件,然后将结果存进指定变量名
aux_source_directory(. DIR_SRCS)# 指定生成目标
add_executable(Demo ${DIR_SRCS})
2. add_subdirectory(math) # 指明本项目包含一个子目录 math,这样 math 目录下的 CMakeLists.txt 文件和源代码也会被处理
target_link_libraries(Demo MathFunctions) #这时候链接math生成的MathFunctions库不需要指定路径了
3. aux_source_directory(. DIR_LIB_SRCS) #将当前文件夹的源文件写入DIR_LIB_SRCS
add_library (MathFunctions ${DIR_LIB_SRCS}) #生成动态链接库
2.自定义编译选项
configure_file(<input> <output>
[COPYONLY] [ESCAPE_QUOTES] [@ONLY]
[NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])
configure_file 主要实现如下两个功能:
1.将 文件里面的内容全部复制到 文件中;
2.根据参数规则,替换 @VAR@ 或 ${VAR} 变量;VAR实在CMakeLists里面定义的参数
我们把希望从cmakelist传到工程的变量写到config.h.in里面
#define workspace @workpspace@ //define 会直接根据规则来替换
#cmakedefine USE_MYMATH @USE_MYMATH@
//cmakedefine 会根据变量的值是否为真(类似 if)来变换为 #define VAR ... 或 #undef VAR
则configure_file帮忙自动生成config.h文件
#define workspace /home/aipan/workspace/study_test/learn_cmake //define 会直接根据规则来替换
#define USE_MYMATH ON
//cmakedefine 会根据变量的值是否为真(类似 if)来变换为 #define VAR ... 或 #undef VAR
注意output的路径一定要带系统路径,不能用相对路径,不然就不生成文件
configure_file("include/config.h.in" "${PROJECT_SOURCE_DIR}/include/config.h")
这样会生成config.h文件
configure_file("include/config.h.in" "include/config.h")
这样就无法生成config.h文件