CMake入门
Posted yutianzuijin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMake入门相关的知识,希望对你有一定的参考价值。
在之前的工作中经常用Makefile来编译项目,但是最近需要阅读别人的项目需要用到CMake,在此记录一下CMake的入门级知识。
添加项目中所有的代码文件
aux_source_directory命令会查找指定目录下的所有源文件,然后将结果存进指定变量名。
#查找当前目录下的所有源文件
#并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)
#指定生成目标
add_executable(Demo $DIR_SRCS)
注意:如果想从DIR_SRCS中排除某些文件,可以通过下述命令实现:
#对应前面的当前目录.
list(REMOVE_ITEM DIR_SRCS “./removed_file_name”)
给项目添加一个自编译库
1.在库目录中增加一个CMakeLists.txt文件,增加一行:
add_library(lib_name code.cxx)
默认会创建一个静态链接库。
2.上层引用的项目在自己的CMakeLists.txt中添加以下几行:
add_subdirectory(lib_dir)
#相当于 Makefile中的-l选项
target_link_libraries(project_name PUBLIC lib_name)
#相当于给特定的target添加-I选项
target_include_directories(project_name PUBLIC “$PROJECT_SOURCE_DIR/lib_dir”)
给项目添加一个第三方库
在引用第三方库的CMakeLists.txt文件中添加三行:
#相当于Makefile中的-I选项
include_directories(lib_include_dir)
#相当于Makefile中的-L选项
link_directories(lib_dir)
#相当于Makefile中的-l选项
target_link_libraries(project_name lib_name)
注意:link_directories选项要放在add_executable选项之前,否则报错。
支持 gdb
让 CMake 支持 gdb 的设置也很容易,只需要指定 Debug 模式下开启 -g 选项:
set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "$ENVCXXFLAGS -O0 -Wall -g -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "$ENVCXXFLAGS -O3 -Wall")
之后可以直接对生成的程序使用 gdb 来调试。
设置编译器和编译选项
默认情况下不需要设置编译器,特殊情况下可以通过修改CMAKE_C_COMPILER和CMAKE_CXX_COMPILER达到修改编译器的目的。特别地,如果希望所有的.c文件用g++编译,可以执行set(CMAKE_C_COMPILER g++)将gcc编译器替换为g++编译器。
编译选项的设置通过CMAKE_C_FLAGS和CMAKE_CXX_FLAGS来实现。当代码中包含.c和.cpp代码时记得两个变量都要设置。
设置可执行文件和库的生成目录
默认情况下,可执行文件和库都生成在Makefile所在的目录,可以通过EXECUTABLE_OUTPUT_PATH 和LIBRARY_OUTPUT_PATH来修改生成的位置。
让Makefile显示更多信息
通常用cmake生成的Makefile在编译过程中只显示一个进度,可以通过设置变量CMAKE_VERBOSE_MAKEFILE为on来让Makefile在编译的时候打印所有的编译选项。
以上是关于CMake入门的主要内容,如果未能解决你的问题,请参考以下文章