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

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

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

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

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

我知道正常的工作流程是将库放入 /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以获得确切的语法。]

关于c++ - 如何以与 VS 解决方案(VS 自动构建依赖项)类似的方式管理自定义库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46900542/

相关文章:

c++ - MSVC 对 C++20 中闭包类型的默认构造函数的行为有所不同

c++ - 通过接受原始数组引用的 constexpr 构造函数初始化 constexpr 变量时的 MSVC 错误?

Linux top -b 只显示特定列

sql-server - 保持不同数据库环境同步

c# - 在 Windows8 中编写 C#/XAML 与 C++/XAML WinRT 应用程序的优缺点是什么?

c++ - 在类内部与外部定义函数的性能

linux - 如何使用 sh 脚本正确读取文件并在 if 语句中使用它?

Linux Perl : How to simply arrange content of an array

android - 如何在 React Native 中设置暂存、开发和运行环境

ruby-on-rails - 在 Windows XP 上构建 Ruby