add_executable

使用指定源文件向项目添加可执行文件。

普通可执行文件

add_executable(<name> <options>... <sources>...)

添加名为 <name> 的可执行目标,该目标将基于命令调用中列出的源文件进行构建。

选项如下

WIN32

自动设置WIN32_EXECUTABLE目标属性。有关详细信息,请参阅该目标属性的文档。

MACOSX_BUNDLE

自动设置MACOSX_BUNDLE目标属性。有关详细信息,请参阅该目标属性的文档。

EXCLUDE_FROM_ALL

自动设置EXCLUDE_FROM_ALL目标属性。有关详细信息,请参阅该目标属性的文档。

<name> 对应于逻辑目标名称,并且在一个项目中必须全局唯一。所构建可执行文件的实际文件名是基于本机平台的约定(例如 <name>.exe 或仅 <name>)构建的。

3.1 版本新增: 使用 $<...> 语法的“生成器表达式”,可以将源参数添加到 add_executable 中。有关可用的表达式,请参阅cmake-generator-expressions(7)手册。

3.11 版本新增: 如果使用 target_sources() 在后面添加,则可以省略源文件。

默认情况下,可执行文件将创建于与命令调用所在源目录树对应的构建文件目录中。参阅 RUNTIME_OUTPUT_DIRECTORY 目标属性说明文档以更改此位置。参阅 OUTPUT_NAME 目标属性说明文档以更改最终文件名中的 <name> 部分。

参阅 cmake-buildsystem(7) 手册以详细了解有关定义构建系统属性的内容。

另外请参阅 HEADER_FILE_ONLY,了解在某些源经过预处理时以及希望从 IDE 访问原始源时该怎么办。

已导入的可执行文件

add_executable(<name> IMPORTED [GLOBAL])

添加 已导入可执行文件目标 以引用位于项目外部的可执行文件。可以通过与项目中构建的任何目标一样的方式引用目标名称,但默认情况下它仅在创建它的目录及目录以下位置可见。

选项如下

GLOBAL

使目标名称具有全局可见性。

不生成用于构建已导入目标的规则,并且 IMPORTED 目标属性为 True。已导入可执行文件对于从诸如 add_custom_command() 之类的命令进行便捷引用很有帮助。

通过设置名称以 IMPORTED_ 开头的属性指定导入的可执行文件的信息。其中最重要的属性是 IMPORTED_LOCATION(及其每个配置版本 IMPORTED_LOCATION_<CONFIG>)指定磁盘上主可执行文件的位置。请参阅 IMPORTED_* 属性文档以了解更多信息。

别名可执行文件

add_executable(<name> ALIAS <target>)

创建 别名目标,便于在后续命令中使用 <name> 引用 <target>。生成的构建系统中不会将 <name> 显示为 make 目标。<target> 可能不是 ALIAS

在版本 3.11 中添加: 一个 ALIAS 可以将 导入目标作为目标 GLOBAL

在版本 3.18 中添加: 一个 ALIAS 可以将非 GLOBAL 导入目标作为目标。此类别名作用域限定在创建别名的目录及其子目录。目标属性 ALIAS_GLOBAL可用于检查别名是否是全局的。

可以将 ALIAS 目标用作从其中读取属性、用于自定义命令和自定义目标的可执行文件。还可以使用常规 if(TARGET) 子命令测试这些别名是否存在。<name> 不得用于修改 <target> 的属性,即,它不能用作 set_property()set_target_properties()target_link_libraries() 等的操作数。不得安装或导出 ALIAS 目标。

另请参阅