gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:56:04 29 4
gpt4 key购买 nike

我想添加一个 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, >
)

这将执行 cmake -E echo foo编译调试配置时的命令和虚拟命令 echo " " " " " "对于所有其他配置。

这非常难看,必须根据主机系统更改虚拟命令。在 Linux 上,它可能是 ":" ":" ":" ":" .那么有没有更干净的方法来做到这一点?

感谢您的时间!

最佳答案

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

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_LISTS is 关键字仅适用于 CMake 版本 >= 3.8

引用
  • Modern way to set compiler flags in cross-platform cmake project
  • 关于CMake:如何添加仅对一种配置执行的自定义命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45455350/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com