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