设置目标属性

在 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