运行cmake
$ mkdir -p build
$ cd build # 创建新目录并切换工作目录
$ cmake .. # 指定 CMakeLists.txt 位置,会生成大量cmake中间文件在当前工作目录下
# 以上两条也可换位这一条命令
$ cmake -H. -Bbuild # -H. 表示当前目录中搜索根CMakeLists.txt文件。-Bbuild告诉CMake在一个名为build的目录中生成所有的文件。
$ cmake --build . # 构建示例项目,在cmake的中间文件目录
cmake --build . --target help # 查看能够生成的所有目标文件
cmake --build . --target <target-name>
常见 target-name 有:
all(或Visual Studio generator中的ALL_BUILD)是默认目标,将在项目中构建所有目标。
clean,删除所有生成的文件。
rebuild_cache,将调用CMake为源文件生成依赖(如果有的话)。
edit_cache,这个目标允许直接编辑缓存。
test(或Visual Studio generator中的RUN_TESTS)将在CTest的帮助下运行测试套件。我们将在第4章中详细讨论测试和CTest。
install,将执行项目安装规则。
package,此目标将调用CPack为项目生成可分发的包。
文件中指定的可执行文件或 .o 等中间目标文件
基本使用
# 使用 main.cpp 生成一个 a.out 可执行文件
# set minimum cmake version
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
# project name and language
project(project_name LANGUAGES CXX)
add_executable(a.out main.cpp)
生成静态库并连接到程序中
# set minimum cmake version
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
# project name and language
project(recipe-03 LANGUAGES CXX)
# generate a library from sources 自动添加前后缀
add_library(message
STATIC # SHARED 对应动态库;OBJECT/MODULE/...
Message.hpp
Message.cpp
)
add_executable(hello-world hello-world.cpp)
# 将静态库 message 链接到可执行程序 hello-world 中
target_link_libraries(hello-world message)
条件分支语句 与 变量
1
、ON
、YES
、true
、Y
或非零数,则逻辑变量为true
0
、OFF
、NO
、false
、N
、IGNORE、NOTFOUND
、空字符串,或者以-NOTFOUND
为后缀,则逻辑变量为false
# set minimum cmake version
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
# project name and language
project(recipe-04 LANGUAGES CXX)
# introduce a toggle for using a library 创建全局变量,控制下方流程
set(USE_LIBRARY OFF)
# option(USE_LIBRARY "Compile sources into a library" OFF)
# 打印消息
message(STATUS "Compile sources into a library? ${USE_LIBRARY}")
# BUILD_SHARED_LIBS is a global flag offered by CMake to toggle the behavior of add_library
# cmake 内部用此变量决定创建动态或静态库
set(BUILD_SHARED_LIBS OFF)
# 引入新局部变量 _sources 包含两个 Message.hpp Message.cpp
list(APPEND _sources Message.hpp Message.cpp)
if(USE_LIBRARY)
# add_library will create a static library since BUILD_SHARED_LIBS is OFF
add_library(message ${_sources})
add_executable(hello-world hello-world.cpp)
target_link_libraries(hello-world message)
else()
add_executable(hello-world hello-world.cpp ${_sources})
endif()
编译时指定变量
option(USE_LIBRARY "Compile sources into a library" OFF) # 变量默认值为 OFF
# $ cmake -D USE_LIBRARY=ON .. 在shell中指定 CMakeLists.txt 时使用 -D 传入变量
选项间依赖情况
include(CMakeDependentOption) # 必须包含此模块 cmake_dependent_option 才可用
# second option depends on the value of the first
# USE_LIBRARY 为真时,MAKE_STATIC_LIBRARY为OFF,否则为 ON
cmake_dependent_option(
MAKE_STATIC_LIBRARY "Compile sources into a static library" OFF
"USE_LIBRARY" ON
)
设置执行文件输出目录
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
标签:OFF,LIBRARY,sources,library,world,cmake From: https://www.cnblogs.com/zhh567/p/16814561.html