我在为add_custom_command苦苦挣扎。让我详细解释这个问题。
我有这些cxx文件和hxx文件集。我对它们每个运行一个perl脚本,以生成某种类型的翻译文件。该命令看起来像
perl trans.pl source.cxx -o source_cxx_tro
同样适用于header.hxx文件。
因此,我将获得多个命令(每个命令一个文件)
然后我在这些命令生成的输出上运行另一个perl scripn(source_cxx_tro,header_hxx_tro)
perl combine.pl source_cxx_tro header_hxx_tro -o dir.trx
dir.trx是输出文件。
我有这样的东西。
Loop_Over_All_Files()
Add_Custom_Command (OUTPUT ${trofile} COMMAND perl trans.pl ${file} -o ${file_tro})
List (APPEND trofiles ${file_tro})
End_Loop()
Add_Custom_Command (TARGET LibraryTarget POST_BUILD COMMAND perl combine.pl ${trofiles} -o LibraryTarget.trx)
我期望的是在构建后构建目标时,将首先构建trofile。但事实并非如此。 $ {trofiles}尚未构建,因此post build命令失败。
有什么办法可以使POST_BUILD命令取决于先前的自定义命令吗?
有什么建议 ?
提前致谢,
苏里亚
请您参考如下方法:
使用add_custom_command创建文件转换链
*。(cxx | hxx)-> * _(cxx | hxx)_tro
* _(cxx | hxx)_tro-> Foo.trx
并通过使用add_custom_target将最后的转换作为cmake中的一流实体。默认情况下,除非您将其标记为ALL或让另一个已构建的目标依赖该目标,否则不会构建该目标。
设置(来源foo.cxx foo.hxx)
add_library(Foo $ {SOURCES})
设置(trofiles)
foreach(_file $ {SOURCES})
字符串(REPLACE“。”“ _” file_tro $ {_ file})
set(file_tro“ $ {file_tro} _tro”)
add_custom_command(
输出$ {file_tro}
命令perl $ {CMAKE_CURRENT_SOURCE_DIR} /trans.pl $ {CMAKE_CURRENT_SOURCE_DIR} / $ {_ file} -o $ {file_tro}
取决于$ {_ file}
)
列表(APPEND trofiles $ {file_tro})
endforeach()
add_custom_command(
输出Foo.trx
命令perl $ {CMAKE_CURRENT_SOURCE_DIR} /combine.pl $ {trofiles} -o Foo.trx
取决于$ {trofiles}
)
add_custom_target(do_trofiles取决于Foo.trx)
add_dependencies(Foo do_trofiles)


