设置目标属性
在 CMake 中,每个 add_executable 或 add_library 目标都有一系列可配置的属性,例如 输出目录、文件名、文件后缀 等。CMake 提供了 set_target_properties 命令,用于修改这些属性,以满足项目组织需求。完整目标属性列表(examples/step5/)
示例解析
假设我们有以下项目结构:
awe@project1$ tree
.
├── CMakeLists.txt
├── foo.cpp
├── run.sh
└── test.cpp
awe@project1$ cat run.sh
rm build target -rf # 删除缓存,保持干净
cmake -S . -B build &&
cmake --build build -j 4
cmake_minimum_required(VERSION 3.20)
project(project1)
add_executable(main test.cpp)
add_library(foo SHARED foo.cpp)
add_library(foo-static STATIC foo.cpp)
set_target_properties(foo
PROPERTIES
LIBRARY_OUTPUT_DIRECTORY ../target/lib/
LIBRARY_OUTPUT_NAME hello_foo
SUFFIX .so.1
)
set_target_properties(foo-static
PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY ../target/lib/
LIBRARY_OUTPUT_NAME hello_foo-static
SUFFIX .lib
)
set_target_properties(main
PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ../target/bin
RUNTIME_OUTPUT_NAME project_main
SUFFIX .exe
)
运行run.sh结果:
(base) awe@project1$ tree target/
target/
├── bin
│ └── project_main.exe
└── lib
├── libfoo-static.lib
└── libhello_foo.so.1
set_target_properties:
用于设置目标的属性(这些属性都需与添加目标时目标的类型一一对应,否则无效,属性OUTPUT_NAME是通用的),指定相对目录是相对于这个目录${CMAKE_BINARY_DIR}
。
- LIBRARY_OUTPUT_DIRECTORY:设置共享库(.dll/.so)的输出目录。
- ARCHIVE_OUTPUT_DIRECTORY:设置静态库(.lib/.a)的输出目录。
- RUNTIME_OUTPUT_DIRECTORY:设置可执行文件(.exe)的输出目录。
- LIBRARY_OUTPUT_NAME:设置共享库(.dll/.so)和静态库的输出名称。
- RUNTIME_OUTPUT_NAME:设置可执行文件(.exe)的输出名称。
- OUTPUT_NAME:设置任意目标的输出名称。
- SUFFIX:覆盖默认的后缀名。
下一章CMake结合Qt