我想使用生成的目标创建一个常规文件,这里是示例代码:
cmake_minimum_required(VERSION 3.2 FATAL_ERROR)
add_executable (write_fields #write_fields will create test.dat
main.cpp
)
add_custom_command (
OUTPUT test.dat
DEPENDS write_fields
COMMAND ${CMAKE_BINARY_DIR}/write_fields
VERBATIM
)
但似乎自定义命令永远不会被执行
更新
以下代码无效
cmake_minimum_required(VERSION 3.2 FATAL_ERROR)
project(myproj)
add_executable (write_fields
main.cpp
)
add_custom_command (
OUTPUT ${CMAKE_SOURCE_DIR}/test.dat
DEPENDS write_fields
COMMAND ${CMAKE_BINARY_DIR}/write_fields
VERBATIM
)
add_custom_target(myproj DEPENDS ${CMAKE_SOURCE_DIR}/test.dat)
答案 0 :(得分:0)
请仔细阅读documentation:
如果
COMMAND
指定可执行目标(由add_executable()
命令创建),它将自动替换为在构建时创建的可执行文件的位置。
换句话说,您只能使用普通目标名称来执行它:
cmake_minimum_required(VERSION 3.2 FATAL_ERROR)
add_executable (
write_fields #write_fields will create test.dat
main.cpp
)
add_custom_command(
COMMAND write_fields
OUTPUT test.dat
DEPENDS write_fields
VERBATIM
)
答案 1 :(得分:0)
第二个签名向目标添加自定义命令,例如a 库或可执行文件。这对于执行操作很有用 在构建目标之前或之后。该命令成为该命令的一部分 target,只会在构建目标时执行。如果 目标已经构建,命令将不会执行。
add_custom_command(TARGET target
PRE_BUILD | PRE_LINK | POST_BUILD
COMMAND command1 [ARGS] [args1...]
[COMMAND command2 [ARGS] [args2...] ...]
[WORKING_DIRECTORY dir]
[COMMENT comment] [VERBATIM])
这定义了一个与构建它相关联的新命令 指定目标。当命令发生时由哪个确定 以下是:
PRE_BUILD - 在所有其他依赖项之前运行
PRE_LINK - 在其他依赖项之后运行
POST_BUILD - 在构建目标后运行
cmake_minimum_required(VERSION 3.2 FATAL_ERROR)
add_executable (write_fields
main.cpp
)
add_custom_command (
TARGET write_fields
POST_BUILD
COMMAND write_fields
VERBATIM
)