cmake add_custom_command 不工作
cmake add_custom_command not working
我正在尝试从 cmake
文件 运行 gperf
。
我在下面创建了一个非常小的 CMakeLists.txt
。
当我运行它被
$ cmake .
$ make
它不会创建 example.hpp
文件
以下 CMakeLists.txt
可能有什么问题?
cmake_minimum_required( VERSION 2.6 )
function(gperf_generate_new source target)
add_custom_target(${target} echo "Creating ${target}")
add_custom_command(
SOURCE ${source}
TARGET ${target}
COMMAND gperf -L c++ ${source} > ${target}
OUTPUTS ${target}
DEPENDS ${source}
)
endfunction()
gperf_generate_new(command_options.new.gperf example.hpp)
由源文件生成器(如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
)
请注意,linkadd_custom_command
和 add_custom_target
之间的年龄在 OUTPUT
和 DEPENDS
选项中相应地使用相同的文件名表示。这样 link 这些命令的顺序是微不足道的(但两个命令应该从同一个 CMakeLists.txt
脚本中调用)。
我正在尝试从 cmake
文件 运行 gperf
。
我在下面创建了一个非常小的 CMakeLists.txt
。
当我运行它被
$ cmake .
$ make
它不会创建 example.hpp
文件
以下 CMakeLists.txt
可能有什么问题?
cmake_minimum_required( VERSION 2.6 )
function(gperf_generate_new source target)
add_custom_target(${target} echo "Creating ${target}")
add_custom_command(
SOURCE ${source}
TARGET ${target}
COMMAND gperf -L c++ ${source} > ${target}
OUTPUTS ${target}
DEPENDS ${source}
)
endfunction()
gperf_generate_new(command_options.new.gperf example.hpp)
由源文件生成器(如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
)
请注意,linkadd_custom_command
和 add_custom_target
之间的年龄在 OUTPUT
和 DEPENDS
选项中相应地使用相同的文件名表示。这样 link 这些命令的顺序是微不足道的(但两个命令应该从同一个 CMakeLists.txt
脚本中调用)。