0

我有一个包含多个子项目的 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并且缺少包含

4

0 回答 0