您可以将add_custom_target与正确的依赖关系定义一起使用,而不是使用add_custom_command(因此不会每次都构建它).
add_custom_target(project
COMMAND touch project.txt)
add_custom_target(project2
COMMAND touch project2.txt)
add_custom_target(combination
COMMAND cat project.txt project2.txt > combination.txt)
add_dependencies(combination project2)
add_dependencies(combination project)
add_executable(t t.c)
add_dependencies(t combination.txt)
再次:确保您使用add_custom_target的DEPENDS参数创建一个真正的依赖关系链,以便项目目标和组合目标变得过时.
更新:我太早了.事实上,cmake(至少高达2.8.9)对依赖项的工作原理如下:通过调用add_dependencies,您无法添加依赖项,该依赖项是自定义命令IOW(生成)文件的OUTPUT.使用add_dependencies,您只能添加add_custom_target创建的目标.但是在add_custom_target中,您可以使用DEPENDS-directive依赖于add_custom_command的输出.这说它使它工作:
add_custom_command(OUTPUT project.txt
COMMAND uptime >> project.txt MAIN_DEPENDENCY t2.c)
add_custom_target(project DEPENDS project.txt)
add_custom_target(combination
COMMAND cat project.txt project2.txt > combination.txt)
add_dependencies(combination project)
这将使组合目标始终重新生成,因为它没有MAIN_DEPENDENCY或DEPENDS,但允许使用add_dependencies.