2013-06-01 3 views
4

Я работаю над несколькими проектами одновременно (некоторые библиотеки и некоторые игры, зависящие от них). Все они находятся на GitHub, в отдельных репозиториях.Предотвращение использования CMake от установленных библиотек вместо «локальных» библиотек

Для удобства я тяну каждый репозиторий в папке «рабочего пространства», как это:

/home/myWorkspace/Library1/ 
/home/myWorkspace/Library2/ 
/home/myWorkspace/Library3/ 
/home/myWorkspace/App1/ 
/home/myWorkspace/App2/ 

У меня есть FindLibrary1, FindLibrary2 и FindLibrary3 .cmake файлы, которые в порядке, искать библиотеки в ../ (что соответствует папке «myWorkspace»), затем /usr/lib/.

В то время как на Windows CMake находит библиотеки в myWorkspace/, на Linux, несмотря ни на что, всегда устанавливаются установленные библиотеки.

Поскольку я хотел бы работать в папке myWorkspace/, а затем устанавливать библиотеки после того, как я закончил, я бы предпочел, чтобы CMake находил и связывал все в папке myWorkspace/.

Я также хотел бы CMake для поиска библиотек в /usr/lib/ и /usr/local/lib/, если нет myWorkspace/ папки, но если myWorkspace/ существует, то оно должно иметь приоритет.

Примеры CMake файлов я использую:


SSVUtils: библиотека без зависимостей

SSVUtils CMakeLists: https://github.com/SuperV1234/SSVUtils/blob/master/CMakeLists.txt

FindSSVUtils.cmake: https://github.com/SuperV1234/SSVUtils/blob/master/cmake/modules/FindSSVUtils.cmake


SSVUtilsJson: библиотека, которая зависит от п SSVUtils и SSVJsonCpp

SSVUtilsJson CMakeLists: https://github.com/SuperV1234/SSVUtilsJson/blob/master/CMakeLists.txt

FindSSVUtilsJson.cmake: https://github.com/SuperV1234/SSVUtilsJson/blob/master/cmake/modules/FindSSVUtilsJson.cmake


Любые идеи, как я могу определить приоритетность папку myWorkspace/ при этом иметь возможность найти в LIBS файловой системы путей?

ответ

5

По умолчанию find_path (или find_library и т. Д.) Сначала проверяет файлы в стандартных местоположениях системы, прежде чем искать значения, указанные в PATH. Вот почему «установленные» библиотеки всегда встречаются сначала в Linux (но не в Windows, у которых нет стандартных мест для установленных библиотек).

Вы можете отключить это поведение, используя опцию NO_CMAKE_SYSTEM_PATH: он будет пропускать обнаружение файлов в стандартных местах.

Теперь ... если вы все еще хотите использовать установленные библиотеки в качестве запасного варианта, когда локальные версии не найдены, вы можете сделать это в два этапа:

find_path(... NO_CMAKE_SYSTEM_PATH) 

if (nothing_found) 
    find_path(...) 
endif() 
Смежные вопросы