我正在开发一个应用程序,并将某些功能分离到另一个存储库中。我想
所以我有这样的布局:
. CMakeLists.txt
|_ src
|_ include
|_ third_party
|_ my_library
|_ CMakeLists.txt
|_ src
|_ include
现在CMakeLists.txt
中的my_library
创建了一个add_library()
的lib,并且它还有一个install
目标,将libmy_library.a
复制到my_library/lib
我想在顶层CMakeLists.txt
中使用此库。因此,在尝试为自己的目标引用该库之前,我需要先构建my_library
CMake项目并安装。我尝试像这样使用ExternalProject_Add()
:
./ CMakeLists.txt
set(MY_LIB_DIR ${CMAKE_SOURCE_DIR}/third_party/my_library)
ExternalProject_Add(my_library
SOURCE_DIR ${MY_LIB_DIR}
UPDATE_DISCONNECTED TRUE
BUILD_IN_SOURCE FALSE
BINARY_DIR ${MY_LIB_DIR}/build
)
list(APPEND CMAKE_PREFIX_PATH ${MY_LIB_DIR}/lib)
# find compiled lib
find_library(MY_LIB_LIBRARY my_library)
add_executable(main ${SOURCES})
add_dependencies(main my_library)
target_link_libraries(main ${MY_LIB_LIBRARY})
但是,这不起作用,因为在cmake读取配置时,libmy_library.a
尚未构建。
这样的问题:如何使CMake构建并安装外部项目,以便我可以将安装工件列为依赖项?
有人建议这是重复的,但是链接的答案会在当前项目内部构建外部项目,这是我不希望的。