6

我想添加一个 cmake 自定义命令,该命令仅在使用 Visual Studio 多配置生成器时在调试配置中构建自定义目标时执行。有没有一种干净的方法可以做到这一点?

为了实现这一点,我首先尝试将整个命令列表包装在这样的生成器表达式中。

add_custom_command(
    ...
    COMMAND $<$<CONFIG:Debug>:cmake;-E;echo;foo>
)

但这在执行命令时给了我一个语法错误。经过反复试验,我得到了以下 hacky 解决方案。这将命令列表的每个单词包装在像这样的生成器表达式中。

add_custom_command(
    ...
    COMMAND $<IF:$<CONFIG:Debug>,cmake,echo>;$<IF:$<CONFIG:Debug>,-E, >;$<IF:$<CONFIG:Debug>,echo, >;$<IF:$<CONFIG:Debug>,foo, >
)

这将在编译 Debug 配置时执行该cmake -E echo foo命令,并echo " " " " " "为所有其他配置执行 dummy 命令。

这很丑陋,必须根据主机系统更改虚拟命令。在 Linux 上可能是":" ":" ":" ":". 那么有没有更清洁的方法来做到这一点?

感谢您的时间!

4

1 回答 1

3

这是我的一段代码(在几个单配置和多配置平台上测试):

CMakeLists.txt

cmake_minimum_required(VERSION 3.8)

project(DebugEchoFoo NONE)

string(
    APPEND _cmd
    "$<IF:$<CONFIG:Debug>,"
        "${CMAKE_COMMAND};-E;echo;foo,"
        "${CMAKE_COMMAND};-E;echo_append"
    ">"
)

add_custom_target(
    ${PROJECT_NAME}
    ALL
    COMMAND "${_cmd}"
    COMMAND_EXPAND_LISTS
)

注意COMMAND_EXPAND_LISTSis 关键字仅适用于 CMake 版本 >= 3.8

参考

于 2017-11-16T21:53:09.877 回答