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_command
和add_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()
将保持源树清理生成的文件。