cmake - 为什么 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
也可以工作(通过填写其余的变量)。
在不将其作为参数传递的情况下执行此操作的正确方法是什么?
解决方案
对于 Cray 编程环境和动态链接,我通常发现最好CRAYPE_LINK_TYPE=dynamic
在配置和构建之前设置好环境变量。这通常与您可能正在使用的任何其他模块配合得更好。
推荐阅读
- c - 如何让 fgets 接收用户输入?
- reactjs - 有谁知道为什么我的论文不会留在网格上?材质-UI
- c# - Xamarin iOS 上此平台异常不支持操作
- javascript - 如何确保首先运行 Jest 引导文件?
- user-interface - JavaFX:将节点拖入 HBox
- python - 通过使其重新加载另一个函数来腌制一个用于多处理的函数
- html - XSLT 将属性值评估为 XPath?
- sql - 聚合函数将多行中的值汇总到一个结果行中
- angular - 在 Angular 9 上重新编译后缺少 @Input() 变量
- wordpress - 从 wordpress 中的日期中删除链接