CMake add_custom_command没有运行

我试图在构build过程中使用add_custom_command来生成一个文件。 该命令似乎没有运行,所以我做了这个testing文件。

cmake_minimum_required( VERSION 2.6 ) add_custom_command( OUTPUT hello.txt COMMAND touch hello.txt DEPENDS hello.txt ) 

我试过跑步:

 cmake . make 

而hello.txt没有生成。 我做错了什么?

添加以下内容:

 add_custom_target(run ALL DEPENDS hello.txt) 

如果你熟悉makefile,这意味着:

 all: run run: hello.txt 

add_custom_target(run ALL ...解决scheme适用于只有一个目标的简单情况,但是当您有多个顶级目标(例如应用程序和testing)时会失败。

当我试图将一些testing数据文件打包到一个目标文件中时,遇到了同样的问题,所以我的unit testing不依赖于任何外部的东西。 我使用add_custom_commandadd_custom_command一些额外的依赖关系来解决它。

 add_custom_command( OUTPUT testData.cpp COMMAND reswrap ARGS testData.src > testData.cpp DEPENDS testData.src ) set_property(SOURCE unit-tests.cpp APPEND PROPERTY OBJECT_DEPENDS testData.cpp) add_executable(app main.cpp) add_executable(tests unit-tests.cpp) 

所以现在testData.cpp会在unit-tests.cpp编译之前生成,而且任何时候testData.src都会改变。 如果你所调用的命令非常慢,那么当你构build应用程序目标时,你将不必等待该命令(只有可执行的testing需要)才能完成。

上面没有显示,但仔细应用${PROJECT_BINARY_DIR}, ${PROJECT_SOURCE_DIR} and include_directories()将保持源树清理生成的文件。