在cmake中如何使用生成的目标创建常规文件

时间:2016-05-30 20:10:56

标签: cmake

我想使用生成的目标创建一个常规文件,这里是示例代码:

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)

2 个答案:

答案 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
)