首页 > 解决方案 > 为什么 CMake find_package 忽略链接器标志?

问题描述

我正在开发一个 Cray 系统,该系统需要在找到动态库之前传递“-dynamic”。就我而言,我正在尝试与 libtiff 链接。该命令cc main.cpp -ltiff失败,文件未找到但cc main.cpp -dynamic -ltiff有效。我相信这个文件未找到的行为会导致 CMake 的find_package.

当我使用 CMake(版本 3.5.2)并-DCMAKE_EXE_LINKER_FLAGS:STRING="-dynamic"从命令行传递时find_package(TIFF)。但是当我像这样在 CMakeLists.txt 中设置它时:

set(CMAKE_EXE_LINKER_FLAGS "-dynamic")
find_package(TIFF REQUIRED)

它找不到libtiff。但如果我尝试:

set(CMAKE_EXE_LINKER_FLAGS "-dynamic" CACHE STRING "" FORCE)
find_package(TIFF REQUIRED)

它第一次失败,但将“-dynamic”放入缓存中,然后在第二次运行时工作。如果我手动设置TIFF_LIBRARY_RELEASE为指向 .so 那么find_package也可以工作(通过填写其余的变量)。

在不将其作为参数传递的情况下执行此操作的正确方法是什么?

标签: cmakelibtiffcray

解决方案


对于 Cray 编程环境和动态链接,我通常发现最好CRAYPE_LINK_TYPE=dynamic在配置和构建之前设置好环境变量。这通常与您可能正在使用的任何其他模块配合得更好。


推荐阅读