cmake target_link_libraries

时间:2011-12-23 10:03:24

标签: cmake

我有一些target_link_libraries:

add_library(x x.cc)
target_link_libraries(x depX1 depX2 depX3)
add_executable(exe exe.cc)
target_link_libraries(exe x ${shared_lib1} ${shared_lib2})

导致exe与x连接以及x:depx1,depx2等的依赖关系 问题是shared_libs插入x和x的依赖关系之间,这在g ++ 4.6中是不可接受的(它在旧版本中有效)。

如何解决?我需要将共享库放在编译行的END,就像我在CMakeLists.txt文件中指定的那样。所以我不想让它们插入,我希望它们在编译行的末尾。另请注意,depx1,depx2 depx3等也有自己的依赖项,所以我唯一想要的是共享库出现在编译行的末尾。

如何用cmake做到这一点? 感谢

- LATER EDIT2-- =>解决了 这可以通过使用丑陋的黑客来解决:

add_custom_command(TARGET TargetName
                   PRE_LINK COMMAND ${PROJECT_SOURCE_DIR}/custom_script.sh 
                   ARGS ${PROJECT_BINARY_DIR}/src/TargetName/CMakeFiles/TargetName.dir/link.txt)

其中src / TargetName / CMakeFiles / TargetName.dir / link.txt是CMake生成的链接命令行,custom_script.sh是一个脚本,用于解析文件并在编译行末尾排列动态链接库。

- 后期编辑 -
所以我理解,使用当前的CMake并没有选择将共享库放在编译行的末尾和g ++ 4.6,一切都会破坏!太棒了!

1 个答案:

答案 0 :(得分:0)

您是否尝试重复x个依赖关系?例如:

  

target_link_libraries(exe x depX1 depX2 depX3 $ {shared_lib1} $ {shared_lib2})