我使用的是 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_minimum_required< 3.24考虑到 调用的 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7838 次 |
| 最近记录: |