Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake:如何使add_custom_命令仅在输入更改时执行?_Cmake - Fatal编程技术网

CMake:如何使add_custom_命令仅在输入更改时执行?

CMake:如何使add_custom_命令仅在输入更改时执行?,cmake,Cmake,对于我的项目,我希望运行一个命令,生成一个已安装的文件(换句话说,生成的文件只是一个数据文件,而不是源代码) 目前,我的CMakeLists.txt中有以下内容 add_custom_command( OUTPUT outputfile.txt COMMAND dosomething ${CMAKE_CURRENT_SOURCE_DIR}/inputfile.txt ${CMAKE_CURRENT_BINARY_DIR}/outpu

对于我的项目,我希望运行一个命令,生成一个已安装的文件(换句话说,生成的文件只是一个数据文件,而不是源代码)

目前,我的CMakeLists.txt中有以下内容

add_custom_command(
    OUTPUT outputfile.txt
    COMMAND dosomething ${CMAKE_CURRENT_SOURCE_DIR}/inputfile.txt
                        ${CMAKE_CURRENT_BINARY_DIR}/output.txt
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/inputfile.txt
)

add_custom_target(
    run_gen_command
    ALL
    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/output.txt
)

install(
    FILES ${CMAKE_CURRENT_BINARY_DIR}/output.txt
    DESTINATION ${CMAKE_INSTALL_DATADIR}/somewhere
)
这很好,但是因为
ALL
被传递到
add\u custom\u target()
,所以每次运行
make
时都会执行该命令

是否有任何方法可以更改此设置,使命令仅在输入文件更改时运行?该命令可能需要一段时间才能完成,因此理想情况下,除非需要,否则不会运行该命令

提前谢谢

纠正这个问题:

add_custom_command(
    OUTPUT outputfile.txt
为此:

add_custom_command(
    OUTPUT output.txt

那么我猜您根本不需要添加自定义目标。如果我错了,只需从
添加自定义目标
中删除
所有
,您应该就可以了。

输出输出文件.txt
可能是
输出输出.txt
?我不明白您的问题
dosomething
依赖于
inputfile.txt
并生成
output.txt
,因此只有在
inputfile.txt
发生更改时才会重新生成
output.txt
。不是这样吗?或者我遗漏了什么。删除
add\u custom\u target
将不起作用。删除
ALL
将使其仅按需生成(不包括在
makeall
中)