我可以说,我的计算机上有一个程序 C:/Tools/generate_v23_debug.exe
我有一个FindGenerate.cmake文件,它允许CMake找到可执行文件的确切路径.
所以在我的CMake代码中,我这样做:
find_program(Generate)
if (NOT Generate_FOUND)
message(FATAL_ERROR "Generator not found!")
Run Code Online (Sandbox Code Playgroud)
所以CMake找到了可执行文件.现在我想在自定义命令语句中调用此程序.我应该使用COMMAND Generator或COMMAND ${GENERATOR_EXECUTABLE}?这两个都会做同样的事情吗?一个比另一个更受欢迎吗?name_EXECUTABLE是CMake将定义的变量(它不在FindGenerate.cmake文件中),还是特定于我正在查看的其他人的示例代码?会COMMAND Generator扩展到正确的道路吗?
add_custom_command(
OUTPUT blahblah.txt
COMMAND Generator inputfile1.log
DEPENDS Generator
)
Run Code Online (Sandbox Code Playgroud)
Com*_*sMS 17
find_program将其结果存储到作为第一个参数给出的变量中.您可以通过插入一些调试输出来验证这一点:
find_program(GENERATOR Generate)
message(${GENERATOR})
Run Code Online (Sandbox Code Playgroud)
请注意,find_program并没有设置超出任何其他变量.特别是,您提到Generate_FOUND并GENERATOR_EXECUTABLE在您的问题中,这些都没有被find_program调用隐含地引入.
程序中的第二个错误是使用了该DEPENDS选项add_custom_command.DEPENDS用于在构建时建模目标间依赖关系,而不是在CMakeLists中操纵控制流.例如,可以DEPEND在命令(blahblah.txt)的输出上添加其他自定义命令,但自定义命令不能DEPEND对先前的查找操作的结果.
一个工作示例可能如下所示:
find_program(GENERATOR Generate)
if(NOT GENERATOR)
message(FATAL_ERROR "Generator not found!")
endif()
add_custom_command(
OUTPUT blahblah.txt
COMMAND ${GENERATOR} inputfile1.log
)
Run Code Online (Sandbox Code Playgroud)
PS:您问为什么代码示例在您的问题中没有正确格式化.您正确缩进了所有内容,但在普通文本和代码段落之间需要一个额外的换行符.我相应地编辑了你的问题.
| 归档时间: |
|
| 查看次数: |
7341 次 |
| 最近记录: |