Ваш подход действителен, учитывая ограничения модуля CMake, называемого find_package(ZLIB)
, в частности FindZLIB.cmake
. В то время как другие модули FindXXX.cmake
имеют специальную опцию для захвата статических библиотек, модуль zlib не имеет.
На SO уже есть несколько вопросов по этой теме, но некоторые старше, чем другие, поэтому есть несколько вариантов.
Вместо этого вы можете применить флаг -static
на более детальном уровне (вместо редактирования глобальной переменной CMAKE_EXE_LINKER_FLAGS
), добавив его к вашему вызову target_link_libraries
. Таким образом, он будет применяться только к этой цели - полезно, если вы создаете другие нестатические цели.
Вы также можете указать CMake явно искать статические библиотеки, установив CMAKE_FIND_LIBRARY_SUFFIXES
,Когда вызывается find_package
, CMake может искать библиотеки, заканчивающиеся на .a
, используя это:
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
find_package(ZLIB REQUIRED)