gpt4 book ai didi

CMAKE add_custom_command : How to use my raw commands

转载 作者:行者123 更新时间:2023-12-04 21:44:54 24 4
gpt4 key购买 nike

我正在尝试向我的 添加一些自定义构建命令vc2010 项目使用 ADD_CUSTOM_COMMAND .但:

[1] 我只是发现 CMAKE 会自动插入比我预期的多得多的代码。

例如,我希望命令完全是:

"c:\Some Folder\MyTool.exe" -arg0 -arg1

CMakeLists.txt中对应的代码如下:
add_custom_command( OUTPUT ${outfile}
COMMAND "c:\Some Folder\MyTool.exe" ARGS "-arg0 -arg1"
# COMMAND "\"c:\Some Folder\MyTool.exe\"" will FAIL to be parsed!
MAIN_DEPENDENCY ${infile}
VERBATIM)

但实际上我得到了:
setlocal
c:\Some Folder\MyTool.exe "-arg0 -arg1"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd

这不是我想要的。我也试过这个字符串: COMMAND "\"${MYTOOL_PATH}\" -arg0 -arg1" ,但 CMake 只是未能解析它,因为字符串前面有一个引号。
所以很糟糕我不能引用命令字符串,因为路径 c:\Some Folder\MyTool.exe包含空格。

[2] 我还注意到 CMake 会自动扩展我的依赖路径。

如果我添加到命令 DEPENS "$(PATH_MACRO)" ,我最终会得到CMake自动扩展的依赖路径: C:\MySolutionDir\$(PATH_MACRO) ;但我只想 $(PATH_MACRO) ,因为我将确保 Visual Studio 理解 $(PATH_MACRO)指。

所以这是我的问题 :

CMake 如何只接受我的原始输入,而不自动扩展路径或插入我不期望的代码?我将确保我的输入对 Visual Studio 有效。谢谢!

附注。我的 CMake 版本:2.8.10.2。 VS 版本:visual studio 2010 Ultimate

最佳答案

万一这对某人有帮助。我试图使用 signtool.exe 使二进制签名作为构建后步骤工作但仅适用于 Release建立。只有未注释的语法有效,其他语法无效。我有点不知道为什么其他一些不起作用,但至少我找到了一个。关于何时生成文字引号以及何时不生成,似乎有一些奇怪的规则,这取决于引用表达式中的内容。也许有人可以解释一下。

function(my_sign_binary TARGET)
#SET(COMMAND_LINE signtool sign $<TARGET_FILE:${TARGET}>)
add_custom_command(
TARGET ${TARGET}
POST_BUILD
COMMENT "Signing: ${TARGET}"
COMMAND "$<$<CONFIG:Release>:signtool>" "$<$<CONFIG:Release>:sign>" "$<$<CONFIG:Release>:$<TARGET_FILE:${TARGET}>>"

#COMMAND $<$<CONFIG:Release>:signtool.exe sign $<TARGET_FILE:${TARGET}>>
#COMMAND echo 1. signtool sign $<TARGET_FILE:${TARGET}>
#COMMAND echo 2. "$<$<CONFIG:Release>:signtool sign $<TARGET_FILE:${TARGET}>>"
#COMMAND "$<$<CONFIG:Release>:signtool sign $<TARGET_FILE:${TARGET}>>"
#COMMAND "$<$<CONFIG:Release>:signtool>" "$<$<CONFIG:Release>:\ sign\ $<TARGET_FILE:${TARGET}>>"
#COMMAND echo 3. $<$<CONFIG:Release>:"signtool sign $<TARGET_FILE:${TARGET}>">
#COMMAND "echo 4. $<$<CONFIG:Release>:signtool sign $<TARGET_FILE:${TARGET}>>"
#COMMAND echo 5. [$<$<CONFIG:Release>:signtool sign $<TARGET_FILE:${TARGET}>>]
#COMMAND $<$<CONFIG:Release>:signtool sign $<TARGET_FILE:${TARGET}>>
#COMMAND $<$<CONFIG:Release>:${COMMAND_LINE}>
#COMMAND $<$<CONFIG:Release>:COMMAND_LINE>
#COMMAND $<$<CONFIG:Release>:"${COMMAND_LINE}">
#COMMAND $<CONFIG:Release>:signtool sign $<TARGET_FILE:${TARGET}>
#COMMAND echo 8. "${$<$<CONFIG:Release>:COMMAND_LINE>}"
#COMMAND ${"$<$<CONFIG:Release>:COMMAND_LINE>"}
)
endfunction()

关于CMAKE add_custom_command : How to use my raw commands,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16052444/

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