【发布时间】:2013-03-15 02:43:39
【问题描述】:
我有两个使用 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")
ProjectB 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)
重现问题:
- 构建两个项目(需要先构建 ProjectA)。
- 更改项目A/src/foo.cpp
- 构建 ProjectA(它将更新 libProject.a)
- 构建 ProjectB(它不会将可执行文件与新的 libProject.a 链接,而是假定未进行任何更改并且什么也不做)。
【问题讨论】:
-
你能展示所涉及的 CMakeList(s) 吗?
-
Angew:我在我的问题中添加了一个示例。
-
这些 CMakeList 是完全独立的,还是它们都是一个“父”CMakeList 的子目录?
-
Angew:它们是完全独立的。
-
您也可以尝试删除
link_directories()(已被弃用)并使用target_link_libraries()中的完整路径。这可能会有所帮助,但不确定。
标签: cmake