我有一个包含多个子项目的 cmake 项目。在其中一个子项目中,我需要使用外部静态库(位于 中${CMAKE_SOURCE_DIR}/ext_lib
),CMakeLists.txt
文件看起来像这样(方法 1):
project(my_project)
set(SRC my_project.c)
add_library(external_lib STATIC IMPORTED)
set_target_properties(external_lib PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/ext_lib/libext.a INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/ext_lib/include")
add_library(my_project SHARED ${SRC})
target_link_libraries(my_project PRIVATE external_lib)
这工作正常并且编译得很好。但是,与外部库相关的部分,我想放在一个单独的CMakeLists.txt
文件中。我想我可以CMakeLists.txt
在与我的外部静态库所在的文件夹(即)相同的文件夹中创建一个新的,${CMAKE_SOURCE_DIR}/ext_lib
内容如下(方法 2)
project(external_lib)
message("External lib CMakelists.txt entered")
add_library(external_lib STATIC IMPORTED)
set_target_properties(external_lib PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/ext_lib/libext.a INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_SOURCE_DIR}/ext_lib/include")
然后添加add_subdirectory("ext_lib)
到主CMakeLists.txt
文件中,只target_link_libraries(my_project PRIVATE external_lib)
在my_project
子项目中使用。但这不起作用。有人可以提示我缺少什么吗?
(我只是添加message(...)
以查看是否CMakeLists.txt
包含)
编辑:
不工作我的意思是它不能正确编译 - 我得到fatal error: ext_lib.h: No such file or directory #include "ext_lib.h"
(使用方法 2)
我查看了生成的.cmake
文件,使用方法 1,外部库的链接是正确的,../../../ext_lib/libext.a
并且包括-isystem ../../../ext_lib/include
对于方法 2,它没有正确链接 - 在.cmake
它刚刚说的文件中-lexternal_lib
并且缺少包含