CMake:如何添加仅针对一种配置执行的自定义命令?

CMake:如何添加仅针对一种配置执行的自定义命令?,cmake,add-custom-command,Cmake,Add Custom Command,我想添加一个cmake自定义命令,该命令仅在使用Visual Studio multi-config generator时在调试配置中生成自定义目标时执行。有没有干净的方法可以做到这一点 为了实现这一点,我首先尝试将整个命令列表包装到生成器表达式中,如下所示。 add_custom_命令( ... 命令$ ) 但是在执行命令时,这给了我一个语法错误。经过一些尝试和错误,我得到了下面的黑客解决方案的工作。这将命令列表中的每个单词包装在生成器表达式中,如下所示 add_custom_comman

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

为了实现这一点,我首先尝试将整个命令列表包装到生成器表达式中,如下所示。

add_custom_命令(
...
命令$
)
但是在执行命令时,这给了我一个语法错误。经过一些尝试和错误,我得到了下面的黑客解决方案的工作。这将命令列表中的每个单词包装在生成器表达式中,如下所示

add_custom_command(
    ...
    COMMAND $<IF:$<CONFIG:Debug>,cmake,echo>;$<IF:$<CONFIG:Debug>,-E, >;$<IF:$<CONFIG:Debug>,echo, >;$<IF:$<CONFIG:Debug>,foo, >
)
add_custom_命令(
...
命令$;$;$$
)
编译调试配置时执行
cmake-E echo foo
命令,并对所有其他配置执行伪命令
echo“”

这非常难看,必须根据主机系统更改虚拟命令。在Linux上,它可以是
::::::,
。那么有没有更干净的方法呢

谢谢你抽出时间

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

CMakeLists.txt

cmake_最低要求(3.8版)
项目(DebugEchoFoo无)
串(
附加命令
"$"
)
添加自定义目标(
${PROJECT_NAME}
全部的
命令“${u cmd}”
命令\u展开\u列表
)
注意:is关键字仅在CMake版本>=3.8时可用

参考文献

为什么不简单地
if(CMAKE\u BUILD\u TYPE STREQUAL“Debug”)添加自定义命令(…)endif()
?或者为什么不简单地创建两个自定义目标?仅供参考,skypjack,
CMAKE\u BUILD\u TYPE STREQUAL“Debug”
对Visual Studio项目无效。在这种情况下需要使用CONFIG,但它是一个构建类型属性,因为在此之前它是未知的。您可能希望在add_custom_命令中执行一个cmake脚本,并用类似于
-DBUILD_CONFIG=$
的内容将CONFIG的值传递给它。然后,在脚本中,您可以确定BUILD_CONFIG是否等于“DEBUG”,等等,并相应地执行操作。不过,这与你的要求略有不同。@StAlphonzo我还没有把这个评论放在回答中,因为我实际上不习惯使用VS。感谢您的澄清。@StAlphonzo好吧,他们可以让我尝试的第一件事“COMMAND$”,在生成器表达式中允许列表,如果COMMAND参数是空字符串,则不执行commmand。在没有测试它的情况下,我将您的答案标记为正确。现在,在输出()中使用生成器表达式之前,我只需对其进行修改
add_custom_command(
    ...
    COMMAND $<IF:$<CONFIG:Debug>,cmake,echo>;$<IF:$<CONFIG:Debug>,-E, >;$<IF:$<CONFIG:Debug>,echo, >;$<IF:$<CONFIG:Debug>,foo, >
)