我正在努力使用add_custom_command.让我详细解释一下这个问题.
我有这些cxx文件和hxx文件.我在每个脚本上运行一个perl脚本来生成某种翻译文件.该命令看起来像
perl trans.pl source.cxx -o source_cxx_tro
Run Code Online (Sandbox Code Playgroud)
同样对于header.hxx文件也是如此.
所以我最终会得到一些多个命令(每个命令用于一个文件)
然后我在这些命令生成的输出上运行另一个perl脚本(source_cxx_tro,header_hxx_tro)
perl combine.pl source_cxx_tro header_hxx_tro -o dir.trx
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
我期望在构建post构建目标时,首先构建trofiles.但事实并非如此.$ {trofiles}没有构建,因此post build命令以失败告终.有什么办法可以告诉POST_BUILD命令取决于以前的自定义命令吗?
有什么建议 ?
谢谢,苏里亚
Mai*_*ann 30
使用add_custom_command来创建文件转换链
并使用add_custom_target使最后一个转换成为cmake中的第一个类实体.默认情况下,此目标不会构建,除非您使用ALL标记它或让另一个构建的目标依赖于它.
set(SOURCES foo.cxx foo.hxx)
add_library(Foo ${SOURCES})
set(trofiles)
foreach(_file ${SOURCES})
string(REPLACE "." "_" file_tro ${_file})
set(file_tro "${file_tro}_tro")
add_custom_command(
OUTPUT ${file_tro}
COMMAND perl ${CMAKE_CURRENT_SOURCE_DIR}/trans.pl ${CMAKE_CURRENT_SOURCE_DIR}/${_file} -o ${file_tro}
DEPENDS ${_file}
)
list(APPEND trofiles ${file_tro})
endforeach()
add_custom_command(
OUTPUT Foo.trx
COMMAND perl ${CMAKE_CURRENT_SOURCE_DIR}/combine.pl ${trofiles} -o Foo.trx
DEPENDS ${trofiles}
)
add_custom_target(do_trofiles DEPENDS Foo.trx)
add_dependencies(Foo do_trofiles)
| 归档时间: |
|
| 查看次数: |
48169 次 |
| 最近记录: |