我有一个包含两个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)。
你知道我做错了什么吗?
1条答案
按热度按时间vfh0ocws1#
由于AudioFile是客户端程序的第三方库,因此AudioFile. h不能包含在AudioLib的头文件中(应该使用AudioFile的指针和前向声明,以避免具有外部依赖性)。您可以在此处查看完整的CmakeLists文件:https://michae9.wordpress.com/2022/09/01/shared-lib-to-be-used-by-client-programs-with-cmake/