1

我正在开发一个 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也可以工作(通过填写其余的变量)。

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

4

2 回答 2

0

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

于 2020-06-18T09:49:07.603 回答
0

根据@Tsyvarev 上面的评论:

调用 project() 时会探测编译器。所以在这种情况下,编译器标志会改变库和包含路径,你必须在调用 project.exe 之前设置 CMAKE_EXE_LINKER_FLAGS。

于 2021-01-17T21:38:35.900 回答