Вызов link_libraries()
в этом случае принимает неправильные аргументы. Команда link_libraries()
принимает аргументы существующих целей CMake или имена библиотек. Это также избыточно с вашим вызовом target_link_libraries()
, так как этот уже связывает ZipLib
с TryZip
.
Попробуйте удалить вызов на link_libraries()
, так как эта функция CMake устарела и его использование крайне не рекомендуется. Вызов include_directories()
аналогично устарел в пользу команды target-Speci c, поэтому рассмотрите возможность использования target_include_directories()
.
Предполагая, что добавленный вами подкаталог ExternalLibrary/ZipLib
содержит дополнительный файл CMakeLists.txt
для настройки цели ZipLib
, вам не нужно добавлять файл ZipFile.cpp
снова. Если этот файл уже скомпилирован в подкаталоге в целевой каталог ZipLib
, вам не нужно снова компилировать его в TryZip
.
add_subdirectory(ExternalLibrary/ZipLib)
set(CMAKE_CXX_STANDARD 17)
add_executable(TryZip main.cpp)
target_include_directories(TryZip PRIVATE ExternalLibrary/ZipLib)
target_link_libraries(TryZip PRIVATE ZipLib)
РЕДАКТИРОВАТЬ : Судя по вашим отзывам, ZipLib
также зависит от pthread
, но почему-то неправильно связывается. Вы можете попробовать добавить следующее в ваш файл ExternalLibrary/ZipLib/CMakeLists.txt
(если он еще не существует), чтобы использовать модуль CMake FindThreads :
find_package(Threads REQUIRED)
...
target_link_libraries(ZipLib PUBLIC Threads::Threads)