如何在CMake中找到zlib的静态版本?

问题描述 投票:0回答:1

我正在使用cmake版本3.12.1,并希望构建使用ZLIB的静态可执行文件。我的机器上同时有静态(libz.a)库和共享(libz.so)库。如何告诉find_package(ZLIB)返回静态版本?也许还有另一种方法可以找到libz.a

我目前的解决方法是指定:

SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")

然后:

target_link_libraries (my_binary z lib1 lib2)

也欢迎对此方法提出批评!

cmake zlib
1个回答
0
投票

鉴于find_package(ZLIB),特别是FindZLIB.cmake调用的CMake模块的局限性,您的方法有效。其他FindXXX.cmake模块具有用于获取静态库的特殊选项,而zlib模块则没有。

关于这个主题,已经有一些关于SO的问题,但是有些问题比其他的早,因此有一些选择。

您可以通过将-static标志添加到您的CMAKE_EXE_LINKER_FLAGS调用中,而在更精细的级别上应用它(而不是编辑全局target_link_libraries变量)。这样,它仅适用于该目标-在构建其他非静态目标时很有用。

您还可以通过设置CMAKE_FIND_LIBRARY_SUFFIXES告诉CMake明确搜索静态库。调用CMAKE_FIND_LIBRARY_SUFFIXES时,CMake可以使用以下命令搜索以find_package结尾的库:

.a
© www.soinside.com 2019 - 2024. All rights reserved.