将目标文件名作为cmake中的编译定义传递

时间:2014-12-08 15:03:35

标签: cmake

我有许多目标的CMakeLists.txt,并且目标定义了特定于配置的后缀。另外,我想知道程序中可执行文件的名称。

在MSVC ++下我通过定义

来做到这一点
add_definitions("-DTARGET_FILE_NAME=\"$(TargetFileName)\"")

但这在其他发电机中不起作用。现在CMake有了生成器表达式,有没有一种方法可以用于任何生成器?

我试过像

这样的东西
add_definitions(-DTARGET_FILE_NAME=$<TARGET_FILE_NAME:$<TARGET_PROPERTY:NAME>>)

但即便

add_definitions(-DTARGET_FILE_NAME=$<TARGET_PROPERTY:NAME>)

只是放置未转义的$<TARGET_PROPERTY:NAME> in the buildfile. I also tried with just $`,但也没有运气。

请注意, compile build命令不知道许多构建文件中 linker 输出的名称,因此似乎没有任何特定于生成器的hack其中一些要么。

1 个答案:

答案 0 :(得分:1)

compile_definitions不支持生成器表达式。使用target_compile_definitions,其中包含:

target_compile_definitions(somelib PRIVATE NAME=$<TARGET_FILE_NAME:somelib>)

http://www.cmake.org/cmake/help/v3.1/command/target_compile_definitions.html