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

How to manage custom libraries in a similar way to VS solutions (where VS builds dependencies automatically)?

在Visual Studio中一个"solution"可以有多个项目,而且一个项目可以是另一个项目的依赖项。

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

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

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

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

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 以获得准确的语法。]