gpt4 book ai didi

CMake:具有多个项目的静态库

转载 作者:行者123 更新时间:2023-12-04 03:31:47 26 4
gpt4 key购买 nike

我有两个使用 CMake 的项目。项目 A 构建一个静态库,然后链接到项目 B。问题是,当我从项目 A 更改源文件并构建两个项目时,项目 B 不会自动再次链接。如何将项目 A(静态库)的输出添加到项目 B?

编辑:这是我的问题的一个例子:

ProjectA CMakeLists.txt:

cmake_minimum_required (VERSION 2.6)
PROJECT(PROJECTA)

ADD_LIBRARY(projectA STATIC "src/foo.cpp")

项目B CMakeLists.txt:

cmake_minimum_required (VERSION 2.6)
PROJECT(PROJECTB)

set(PROJECTA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../ProjectA)
include_directories(${PROJECTA_DIR}/include)

link_directories(${PROJECTA_DIR}/build)

ADD_EXECUTABLE(projectB "src/main.cpp")
target_link_libraries(projectB projectA)

重现问题:

  1. 构建两个项目(需要先构建 ProjectA)。
  2. 更改 ProjectA/src/foo.cpp
  3. 构建 ProjectA(它将更新 libProject.a)
  4. 构建 ProjectB(它不会将可执行文件与新的 libProject.a 链接,而是假定未进行任何更改且不执行任何操作)。

最佳答案

将我的评论变成答案。

通常,当 CMake 项目必须合作时,使用 add_subdirectory() 使它们成为同一构建系统的一部分是有益的。这样,CMake 可以跟踪目标之间的依赖关系,自动解析对逻辑目标名称的引用等。

如果这不适合您,您至少应该删除 link_directories() 并在 target_link_libraries() 中使用库的完整路径。通常不鼓励使用 link_directories(),因为它会导致问题。

关于CMake:具有多个项目的静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15423821/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com