cmake add_custom_command无效

时间:2015-10-13 00:05:18

标签: cmake add-custom-command

我正在尝试从{ <OpenStruct= ....> } 文件中运行gperf

我在下面创建了一个非常小的cmake

当我按

运行时
CMakeLists.txt

它不会创建$ cmake . $ make 文件

以下example.hpp会出现什么问题?

CMakeLists.txt

1 个答案:

答案 0 :(得分:3)

源文件生成器生成的文件(如gpref)很少需要作为独立文件。相反,这些源文件通常用于在项目中创建可执行文件或库。

因此,在CMake中使用源文件生成器的标准模式如下:

# Call add_custom_command() with appropriate arguments for generate output file
# Note, that *gperf* will work in the build tree,
# so for file in the source tree full path should be used.
function(gperf_generate_new input output)
    add_custom_command(
        OUTPUT ${output}
        COMMAND gperf -L c++ ${input} > ${output}
        DEPENDS ${input}
        COMMENT "Generate ${output}" # Just for nice message during build
    )
endfunction()

# Generate *example.hpp* file ...
gperf_generate_new(${CMAKE_CURRENT_SOURCE_DIR}/command_options.new.gperf example.hpp)

# ... for use it in executable
add_executable(my_program ${CMAKE_CURRENT_BINARY_DIR}/example.hpp <other sources>)

如果您只想测试example.hpp是否正在生成,而不是add_executable()使用

add_custom_target(my_target
    ALL # Force target to be built with default build target.
    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/example.hpp
)

请注意,add_custom_commandadd_custom_target之间的关联在OUTPUTDEPENDS选项中使用相同的文件名表示。使用这些命令的链接顺序是无关紧要的(但是应该从相同的CMakeLists.txt脚本调用这两个命令)。