在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不希望我这样做...... :)
有任何想法吗?
我假设您需要使用add_dependencies来定义使用定义的目标之间的依赖关系add_custom_target.该DEPENDS选项用于指定自定义规则中的文件级依赖项,但不指定目标级依赖项.
例如,命令生成.obj文件作为输出使用DEPENDS来指定它取决于.cpp文件.此外,目标可以依赖于单个文件,而不仅仅依赖于其他目标.因此,对于文件级依赖项,请使用DEPENDS选项,但使用add_dependencies作为目标级别.
| 归档时间: |
|
| 查看次数: |
8646 次 |
| 最近记录: |