Почему CMake find_package игнорирует флаги компоновщика? - PullRequest
1 голос
/ 16 июня 2020

Я разрабатываю систему Cray, которая требует передачи '-dynami c' до того, как будут найдены библиотеки Dynami c. В моем случае я пытаюсь связать с 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)

, он не удастся в первый раз, но поместит «-dynami c» в кеш, а затем будет работать при втором запуске. Если я вручную установил TIFF_LIBRARY_RELEASE для указания на .so, тогда find_package также будет работать (заполнив остальные переменные).

Каков правильный способ сделать это, не передавая его как параметр?

1 Ответ

0 голосов
/ 18 июня 2020

Для среды программирования Cray и динамической c компоновки я обычно считаю, что лучше всего установить переменную среды CRAYPE_LINK_TYPE=dynamic перед настройкой и сборкой. Обычно это лучше работает с любыми другими модулями, которые вы можете использовать.

...