-
cmake_minimum_required 指定cmake的最小版本要求
#CMake最小版本要求2.8.2 cmake_minimum_required(VERSION 2.8.2)
-
project 定义工程名称,并指定工程支持的编译语言
#指定工程名字和版本号,并指定编译语言 project(HELLOWORLD VERSION 1.0.0 LANGUAGES C CXX)
-
显示定义变量
#定义src变量,其值为main.cpp hello.cpp set(SRC main.cpp hello.cpp)
-
添加工程搜索头文件路径 相当于g++中-i参数
#将/usr/include/myinclude和./include添加到头文件搜索路径中 include_directories(/usr/include/myinclude ./include) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${CMAKE_CURRENT_SOURCE_DIR}/include")
-
向工程添加库文件搜索路径 相当于g++中-L参数
#将/usr/lib/mylib和./lib添加到工程库文件搜索路径中 link_directories(/usr/lib/mylib ./lib) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_CURRENT_SOURCE_DIR}/libs")
-
生成库文件
#通过变量SRC生成libhello.so共享库 [SHARED|STATIC|MODULE] add_library(hello SHARED ${SRC})
-
添加编译参数
#添加编译参数 add_compile_options(-Wall -std=c++11 -o2 -g)
-
生成可以执行文件
#编译main.cpp生成一个main的可执行文件 add_executable(main main.cpp)
-
为target添加需要链接的共享库 相当于g++中-I参数
#将hello动态文库文件链接到了执行文件main中 target_link_libraries(mian hello)
-
向当前工程文件添加存放源文件的子目录,并可以执行中间二进制文件的存放路径
#添加src子目录中一个CMakeLists.txt add_subdirectory(src)
-
将某个路径下所有源文件列表存储到一个变量中,通常用于历史自动构建原文件列表
#定义SRC变量,其值为当前目录下所有的源代码文件 aux_source_directory(. SRC) #编译SRC变量所代表的源码文件,生成main可执行文件 add_executable(main $(SRC))
-
设置编译类型,通过CMAKE_BUILD_TYPE,[Debug,Release,RelWithDebInfo,MinSizeRel]
set(CMAKE_BUILD_TYPE Debug)
#再当前目录下会生成build目录,并在build中生成makefile文件
cmake -B build -DCMAKE_BUILD_TYPE=Debug
#对Debug模式开启调试信息,开启代码优化,Release开启o2代码优化,没有调试信息
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g -O0")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O2")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2")
- 添加全局宏定义
add_definitions(-DDEBUG -DREAL_COOL_ENGINEER)
CMake常用变量
PROJECT_SOURCE_DIR:工程的根目录
PROJECT_BINARY_DIR:运行 cmake 命令的目录,通常是 ${PROJECT_SOURCE_DIR}/build
PROJECT_NAME:返回通过 project 命令定义的项目名称
CMAKE_CURRENT_SOURCE_DIR:当前处理的 CMakeLists.txt 所在的路径
CMAKE_CURRENT_BINARY_DIR:target 编译目录
CMAKE_CURRENT_LIST_DIR:CMakeLists.txt 的完整路径
CMAKE_CURRENT_LIST_LINE:当前所在的行
CMAKE_MODULE_PATH:定义自己的 cmake 模块所在的路径,SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake),然后可以用INCLUDE命令来调用自己的模块
EXECUTABLE_OUTPUT_PATH:重新定义目标二进制可执行文件的存放位置
LIBRARY_OUTPUT_PATH:重新定义目标链接库文件的存放位置
CMAKE_MAJOR_VERSION:cmake 主版本号,比如 3.4.1 中的 3
CMAKE_MINOR_VERSION:cmake 次版本号,比如 3.4.1 中的 4
CMAKE_PATCH_VERSION:cmake 补丁等级,比如 3.4.1 中的 1
CMAKE_SYSTEM:系统名称,比如 Linux-2.6.22
CMAKE_SYSTEM_NAME:不包含版本的系统名,比如 Linux
CMAKE_SYSTEM_VERSION:系统版本,比如 2.6.22
CMAKE_SYSTEM_PROCESSOR:处理器名称,比如 i686
UNIX:在所有的类 UNIX 平台下该值为 TRUE,包括 OS X 和 cygwin
WIN32:在所有的 win32 平台下该值为 TRUE,包括 cygwin
BUILD_SHARED_LIBS:这个开关用来控制默认的库编译方式,如果不进行设置,使用 add_library 又没有指定库类型的情况下,默认编译生成的库都是静态库。
如果 set(BUILD_SHARED_LIBS ON) 后,默认生成的为动态库
CMAKE_C_FLAGS:设置 C 编译选项,也可以通过指令 add_definitions() 添加
CMAKE_CXX_FLAGS:设置 C++ 编译选项,也可以通过指令 add_definitions() 添加
<(10条消息) CMakeLists.txt 语法介绍与实例演练_阿飞__的博客-CSDN博客_cmakelist>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)