Как я могу заменить данный -Ldir1 на -Ldir2 в командной строке компоновки, сгенерированной cmake

у меня есть CMakeLists.txt,
Я использую это для генерации makefile с ccmake,
Потом по makeМои источники собраны хорошо.
Во время соединения полученная командная строка по существу

/opt/rh/devtoolset-6/root/usr/bin/c++ myprog.cc.o -o myprog -Ldir3 -L/opt/rh/devtoolset-3/root/usr/lib/gcc/x86_64-redhat-linux/4.9.2 ... -Wl,-rpath,dir4:dir5:/opt/rh/devtoolset-3/root/usr/lib/gcc/x86_64-redhat-linux/4.9.2 ...

Два места, указывающие путь поиска

/opt/rh/devtoolset-3/root/usr/lib/gcc/x86_64-redhat-linux/4.9.2

на самом деле должен указывать на

/opt/rh/devtoolset-6/root/usr/lib/gcc/x86_64-redhat-linux/6.2.1

Как я могу это исправить?


я имею devtoolset-3 в моей системе, но я не знаю, где задан этот путь поиска или как его изменить.
Я действительно ожидал, что это произойдет автоматически после выполнения

scl-devtoolset-6

(в моем .bashrc), так же правильная версия /opt/rh/devtoolset-6/root/usr/bin/c++ обнаружен без меня, делающего что-либо еще.

Конечно, я получаю много ошибок времени компоновки из-за несоответствия версий.

Единственное место, где я вижу набор путей поиска, находится в строке

link_directories(${LIBDIR_MY})

в CMakeLists.txt, а также LIBDIR_MY указывает на dir3, который правильно добавлен в командной строке ссылки.
Но я не нашел места, где .../devtoolset-3/... добавлен.

Возможное происхождение -L:

  1. link_directories в CMakeLists.txt: проверено.
  2. target_link_libraries: Куда? Каков ожидаемый шаблон имени файла для поиска?
  3. link_libraries: Куда? Каков ожидаемый шаблон имени файла для поиска?
  4. CMAKE_LIBRARY_PATH: Проверено. Это не установлено.
  5. find_package Команда: см. ниже
  6. Где-нибудь еще?

это Как добавить путь к библиотеке в cmake? не добавляет к моему вопросу.


Обновление 1:

Был на самом деле find_package(mylib) (на самом деле, с другим именем) в CMakeLists.txt,
Собираюсь в реж mylib и выдача find . -name “*” -type f -exec grep /opt/rh/devtoolset-3 {} \; было два файла, которые соответствовали:

  1. build/CMakeCache.txt:
    два случая devtoolset-3

    PETSC_LIBRARIES:STRING=...devtoolset-3...
    FIND_PACKAGE_MESSAGE_DETAILS_PETSc:INTERNAL=[...devtoolset-3...][YES][v()]
    

    Мне кажется, что это происходит из файла CMake/cmake-modules/FindPETSc.cmake (возможно вызывается линией find_package (PETSc REQUIRED) в CMakeLists.txt), которая имеет строку

    set (PETSC_LIBRARIES ${PETSC_LIBRARIES_ALL} CACHE STRING "PETSc libraries" FORCE)
    

    и много предыдущих строк

    set (PETSC_LIBRARIES_<various terms> ...)
    

Заметки:
Я не знаю, где в этом файле devtoolset-3 сначала обнаружен и установлен.

  1. build/include/summit/mylibConfig.cmake,
    Я до сих пор не мог отследить, что сделал devtoolset-3 появиться здесь.

1

Решение

Я нашел виновника.
Как указано в обновлении 1 OP, последовательность выглядит следующим образом:

  1. Линия
    find_package (PETSc REQUIRED) в файле (1)
    CMakeLists.txt файл принудительной обработки (2)
    CMake/cmake-modules/FindPETSc.cmake,
  2. Линия* 1
    petsc_get_variable (PETSC_EXTERNAL_LIB_BASIC petsc_libs_external) в файле (2)
    CMake/cmake-modules/FindPETSc.cmake устанавливает локальную переменную cmake
    petsc_libs_external от значения переменной
    PETSC_EXTERNAL_LIB_BASIC читать из файла (3)
    ~/petsc-3.8.2/lib/petsc/conf/petscvariables,
  3. PETSC_EXTERNAL_LIB_BASIC не задан явно в файле (3)
    ~/petsc-3.8.2/lib/petsc/conf/petscvariables, Линия
    include ~/petsc-3.8.2/arch-linux2-c-debug/lib/petsc/conf/petscvariables заставляет читать файл (4)
    ~/petsc-3.8.2/arch-linux2-c-debug/lib/petsc/conf/petscvariables,
  4. Линия
    PETSC_EXTERNAL_LIB_BASIC = ... -Wl,-rpath,/opt/rh/devtoolset-3/root/usr/lib/gcc/x86_64-redhat-linux/4.9.2 -L/opt/rh/devtoolset-3/root/usr/lib/gcc/x86_64-redhat-linux/4.9.2 -Wl,-rpath,/opt/rh/devtoolset-3/root/usr/lib64 -L/opt/rh/devtoolset-3/root/usr/lib64 -Wl,-rpath,/opt/rh/devtoolset-3/root/usr/lib -L/opt/rh/devtoolset-3/root/usr/lib ... в файле (4)
    /home/sserebrinsky/petsc-3.8.2/arch-linux2-c-debug/lib/petsc/conf/petscvariables приносит «нежелательные» каталоги в исполняемую командную строку.

* 1 (petsc_get_variable это макрос, определенный в FindPETSc.cmake)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]