我正在努力使用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命令取决于以前的自定义命令吗?
有什么建议 ?
谢谢,苏里亚
在CMake中,我正在尝试构建一个项目,其中包含由不同工具链编译的多个不同处理器体系结构的库.对于每个体系结构,静态库都构建在多个子目录中,然后收集到根目录中的共享库中.到目前为止,我还没弄清楚这一点.
到目前为止我最接近的是使用add_custom_command
和add_custom_target
在子目录中生成.a文件,然后尝试使用add_custom_command
和add_custom_target
再次将它们收集到根目录中的.so文件中.但是如果我将.so依赖项指向自定义命令输出列表,则makefile会显示"No rule to make ...",因为自定义命令输出不会从子目录中导出.所以我尝试将.so依赖项指向子目录中的自定义目标列表,并且它抱怨它无法找到具有该名称的文件.
把它放在代码表格中,这是我在子目录中的内容:
add_custom_command(OUTPUT subout.a COMMAND ${MYAR} ...)
add_custom_target(subout_target DEPENDS subout.a)
Run Code Online (Sandbox Code Playgroud)
在根目录中,我试过这个:
add_custom_command(OUTPUT my.so COMMAND ${MYLD} ... DEPENDS sub/subout.a)
add_custom_target(dll ALL DEPENDS my.so)
Run Code Online (Sandbox Code Playgroud)
我得到"没有规则来制作目标'sub/subout.a','my.so'需要.停." 这是有道理的,因为add_custom_command
目标不会从目录中导出.
我试过这个:
add_custom_command(OUTPUT my.so COMMAND ${MYLD} ... DEPENDS subout_target)
add_custom_target(dll ALL DEPENDS my.so)
Run Code Online (Sandbox Code Playgroud)
这实际上会导致生成sub/subout.a文件,但随后它就会死掉,说"没有规则可以使目标'subout_target'......"
我认为我真正想要的是能够模仿add_library
多种不同架构的行为.但显然,CMake不希望我这样做...... :)
有任何想法吗?
在CMake中,是否可以以编程方式检索将用于给定目标的链接器标志的完整列表?我看到的唯一方法是检查link.txt
目标CMakeFiles
目录中的文件。不理想。
我感兴趣的用例是收集数据,以将其包含在pkg-config文件之类的文件中。我正在编写一个库,它包括几个使用该库的可执行实用程序。构建可执行文件(尤其是在静态构建库时)需要一条非平凡的链接行来链接到我的库及其依赖项。因此,我想写出将这些可执行文件构建到包中包含的数据文件中所需的链接行,以便其他客户端可以知道如何链接。
关于cmake的范围规则,我有点困惑.我有文件和目录,如
??? test
? CMakeLists.txt
? ??? cmake
? ? MyCMake
? ? MyCMake2
? ??? child
? ? CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
内容如下:
cmake的/ MyCMake:
set(MY_NAME MyName)
message("MyCMake: " ${MY_NAME} " " ${YOUR_NAME} " " ${HIS_NAME})
Run Code Online (Sandbox Code Playgroud)
cmake的/ MyCMake2:
set(HIS_NAME NewName)
message("MyCMake2: " ${MY_NAME} " " ${YOUR_NAME} " " ${HIS_NAME})
Run Code Online (Sandbox Code Playgroud)
子/的CMakeLists.txt:
set(YOUR_NAME YourName)
set(HIS_NAME HisName PARENT_SCOPE)
message("Child: " ${MY_NAME} " " ${YOUR_NAME} " " ${HIS_NAME})
Run Code Online (Sandbox Code Playgroud)
测试/的CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
include(MyCMake)
add_subdirectory(child)
message("Parent1: " ${MY_NAME} " " ${YOUR_NAME} " " ${HIS_NAME})
include(MyCMake2) …
Run Code Online (Sandbox Code Playgroud) cmake ×4