使用cmake链接到共享库的资源库中缺少标题,而共享库链接到我的项目

fjaof16o  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(165)

我有一个包含两个cmake项目的GitHub仓库。假设仓库的名称是“Audio”,它包含一个目录“AudioGui”和一个目录“AudioLib”。“AudioLib”项目是一个共享库,它包含并链接了另一个GitHub仓库的头文件。
可以构建AudioLib,其cmake包含:

include(FetchContent)

FetchContent_Declare(
  AudioFile
  GIT_REPOSITORY https://github.com/adamstark/AudioFile.git
  GIT_TAG        1.1.0
)

FetchContent_MakeAvailable(AudioFile)

target_link_libraries(AudioLib PUBLIC
  Qt${QT_VERSION_MAJOR}::Core
  AudioFile
)

AudioGui无法建置,但cmake不会传回错误,它的cmake中包含:

include(FetchContent)
FetchContent_Declare(
  Audio
  GIT_REPOSITORY https://github.com/myname/Audio.git
  GIT_TAG        1.0.1
)

FetchContent_MakeAvailable(Audio)

target_link_libraries(AudioGui PUBLIC
  Qt${QT_VERSION_MAJOR}::Widgets
  Audio
)

问题是AudioGui中的头文件的包含可以通过以下方式完成:#include“_deps/audio-src/音频库/转换器_global. h”#include“_deps/audio-src/音频库/转换器. h”而不是#include“音频库/转换器_global. h”#include“音频库/转换器. h”,即使这样,我也会收到一个错误,即无法找到标头AudioFile. h(它包含在AudioLib中,并直接指向AudioGui)。
你知道我做错了什么吗?

vfh0ocws

vfh0ocws1#

由于AudioFile是客户端程序的第三方库,因此AudioFile. h不能包含在AudioLib的头文件中(应该使用AudioFile的指针和前向声明,以避免具有外部依赖性)。您可以在此处查看完整的CmakeLists文件:https://michae9.wordpress.com/2022/09/01/shared-lib-to-be-used-by-client-programs-with-cmake/

相关问题