如何在C ++预处理程序定义中获取CMake可执行文件名称

时间:2019-03-20 20:57:09

标签: c++ cmake

我的CMake文件中有两个可执行文件定义

add_executable(ProjectFoo ...)
add_executable(ProjectFoo_UnitTests ...)

有没有办法在C ++代码中获取可执行文件的名称(ProjectFoo或ProjectFoo_UnitTests),如下所示?语法可能不正确,但我希望它可以阐明意图。

#if executable_name == ProjectFoo
...

2 个答案:

答案 0 :(得分:2)

如果您只想在运行时知道正在运行的可执行文件是否是单元测试配置,则将专用的预处理器定义传递给您的单元测试可执行文件:

target_compile_definitions(ProjectFoo_UnitTests IS_UNIT_TEST)

并在您的C ++代码中检查此定义:

#if defined (IS_UNIT_TEST)
# include "some_mock.hpp"
#endif

答案 1 :(得分:1)

您可以使用自己的宏定义“运送”每个可执行文件。您可以在该宏中存储可执行文件的名称:

target_compile_definitions(ProjectFoo executable_name=ProjectFoo)
target_compile_definitions(ProjectFoo_UnitTests executable_name=ProjectFoo_UnitTests)

在代码executable_name内可以提取可执行文件的名称:

#if executable_name==ProjectFoo