当子对象调用动态库时,如何将两个子项目静态链接到主项目

时间:2014-09-12 15:14:22

标签: c++ cmake

我的目录中有两个子目录(项目),带有自己的CMakeLists.txt文件,如

main_dir:
   CMakeLists.txt
   src/

   dir_one/
      CMakeLists.txt
      src/

   dir_two/
      CMakeLists.txt
      src/

我的CMakeLists.txt看起来像

.....
    target_link_libraries (
        main
        /usr/lib/dir_one.so
        /usr/lib/dir_two.so
    )

如何使dir_one和dir_two在main build中构建为静态,以便轻松部署? (与静态链接)。

1 个答案:

答案 0 :(得分:2)

只需使用target_link_libraries中的项目名称而不是.so文件。 CMake将正确设置所有依赖项,并链接它们的输出。

target_link_libraries(main dir_one dir_two)

来自doc:

的引用
  

如果库名称与项目中另一个目标的库名称匹配,则会在构建系统中自动添加依赖项,以确保链接库在目标链接之前是最新的。以 - ,但不是-l或-framework开头的项目名称被视为链接器标志。