gpt4 book ai didi

cmake - cmake add_custom_command

转载 作者:行者123 更新时间:2023-12-03 14:38:28 27 4
gpt4 key购买 nike

我在为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)

关于cmake - cmake add_custom_command,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2354473/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com