如何以与VS解决方案类似的方式管理自定义库(VS自动构建依赖关系)?

时间:2017-10-24 00:46:40

标签: c++ linux development-environment dependency-management clion

在Visual Studio中,"解决方案"可以有多个项目,项目可以是另一个项目的依赖项。

它之所以有用是因为Visual Studio会在您构建的项目编译时构建依赖项。

这可确保您正在编译的依赖项二进制文件始终是最新版本。忽略自定义库中的正在进行(而非释放)代码等问题,如何在CLion或其他Linux开发设置/环境中实现此行为?

我知道正常的工作流程是将库放入/usr/lib/但是有另一种方法吗?

1 个答案:

答案 0 :(得分:1)

使用您在评论中列出的结构,它可能是这样的

project(A)

add_executable(A ${SOURCES_FOR_A})
target_link_libraries(A B C D)  # Make A depend on libraries B, C and D

add_library(B STATIC ${SOURCES_FOR_B})
add_library(C STATIC ${SOURCES_FOR_C})
add_library(D STATIC ${SOURCES_FOR_D})

请注意,C和D之间没有特殊的依赖关系,因为静态库通常只是对象文件的简单存档。静态库本身并没有真正链接,在链接可执行文件时需要提供所有静态库,即使应用程序没有直接使用它们。

如果库是共享,那么它会有所不同:

project(A)

add_executable(A ${SOURCES_FOR_A})
target_link_libraries(A B C)  # Make A depend on libraries B and C

add_library(B SHARED ${SOURCES_FOR_B})

add_library(C SHARED ${SOURCES_FOR_C})
target_link_libraries(C D) # Make C depend on D

add_library(D SHARED ${SOURCES_FOR_D})

共享库链接,与可执行目标非常相似。因此,目标A不需要指定D的间接依赖关系,因为它已链接到C

[注意:上面显示的CMake命令可能不是所需的确切语法和参数。请阅读the documentation以获取确切的语法。]