1、前言
在前面两篇文章2025-11-07 如何基于CMake实现Qt应用的自动Deploy 和 2025-11-08 如何基于CMake实现软件安装包的生成中,其实都用到了CMake的生成器表达式,那么它具体是怎么定义的?如何使用呢?
2、内容
举例$<TARGET_FILE_DIR:${PROJECT_NAME}>
这里可以分两部分来看,第一部分是${PROJECT_NAME} 另一部分是$<TARGET_FILE_DIR:>。前面一部分很好理解,就是CMake中的变量, 通过${}的方式进行引用,另一部分就是生成器表达式的关键,它实际返回的是目标可执行文件所在的目录路径,目标可执行文件,就是第一部分指定的内容。
除了这个$<TARGET_FILE_DIR:>以外,类似的还有:
# 1. TARGET_FILE - 返回完整文件路径
$<TARGET_FILE:${PROJECT_NAME}>
# → H:/src/.../output/mainwindow.exe
# 2. TARGET_FILE_NAME - 返回文件名
$<TARGET_FILE_NAME:${PROJECT_NAME}>
# → mainwindow.exe
# 3. TARGET_FILE_BASE_NAME - 返回不带扩展名的文件名
$<TARGET_FILE_BASE_NAME:${PROJECT_NAME}>
# → mainwindow
更详细的介绍可以参考CMake官方文档 [cmake-generator-expressions(7) — CMake 4.2.0-rc2 Documentation]