如果您希望能够输入“make out.txt”,您可能想要add_custom_target
代替add_custom_command
. 这将创建一个可以构建的目标,并在构建中执行指定的命令。
我建议不要将此目标称为“out.txt”,这会误导它看起来像文本文件而不是目标,而是建议使用更像“RunMain”或“GetOutputOfMain”的东西。
add_custom_target
如果您可以将最新版本的 CMake 指定为最低要求,则可以在调用的命令部分中使用“生成器表达式” 。这没有为 记录add_custom_target
,但您可以在 文档中阅读生成器表达式add_custom_command
。我不确定为了使生成器表达式可用,应将 CMake 的最低要求版本设置为什么。
因此,您的 CMakeLists.txt 可以更改为:
cmake_minimum_required(VERSION 2.8.10)
project(Test)
add_executable(MyExe main.cpp)
set(MainOut "${CMAKE_CURRENT_BINARY_DIR}/out.txt")
add_custom_target(RunMain $<TARGET_FILE:MyExe> > ${MainOut}
COMMENT "Running MyExe with output redirected to ${MainOut}")
# Ensure MyExe is built before trying to build the custom target
add_dependencies(RunMain MyExe)
然后就make RunMain
生成out.txt。
如果您不想指定如此高的最低版本,则可以改用过时的LOCATION
目标属性:
get_target_property(MyExeLocation MyExe LOCATION)
add_custom_target(
RunMain ${MyExeLocation} > ${MainOut}
COMMENT "Running ${MyExeLocation} with output redirected to ${MainOut}")