В настоящее время у меня есть сторонняя библиотека A с открытым исходным кодом, установленная в \ usr \ local. Теперь я хочу поэкспериментировать с некоторыми изменениями кода в этой библиотеке, но я хочу сделать этот тест в локальной папке, чтобы он не влиял на системную библиотеку. Давайте назовем локальную сборку A ‘.
У меня есть исполняемый файл B, который использует библиотеку A в качестве статической библиотеки. В CMakelists.txt он использовал find_pacakge (A), чтобы найти тот, который установлен в \ usr \ local. Какой самый простой способ сделать ссылку на A ‘в локальной папке?
Я понял, что если я УСТАНАВЛИВАЮ A ‘в локальную папку (или любую другую папку, отличную от usr \ local), мы можем заставить CMAKE найти пакет в этой папке, используя HINTS. Тем не менее, я надеюсь, что есть лучший способ даже без установки. После
all, A и A ‘используют одинаковые заголовочные файлы и просто расположены в разных местах. Поэтому я предполагаю, что include_directories не нужно менять. Но я не знаю, как связать библиотеку с указанным файлом в указанной папке вместо системной папки по умолчанию, найденной в find_package.
Я действительно новичок в Cmake, надеюсь, я прояснил ситуацию. большое спасибо
1) Обычно вы берете все, что не включено здесь, и lib там, также в Modern CMake вы можете использовать target_include_directory()
так что include и библиотека «связаны», то есть вы получаете все с одним find_package()
вызов.
сравни: https://cmake.org/cmake/help/latest/command/target_include_directories.html
2) Посмотрите на CMAKE_PREFIX_PATH
это правильный способ изменить путь поиска по умолчанию, если вы хотите найти A ‘вместо A>
сравни: https://cmake.org/cmake/help/latest/variable/CMAKE_PREFIX_PATH.html
3) если вы хотите использовать каталог сборки A ‘, то проект CMake A’ должен использовать «export ()», чтобы вы могли использовать его непосредственно из buildir.
примечание: немногие проекты поддерживают его, и правильный способ — сначала установить (в локальную папку), а затем использовать.
сравни: https://cmake.org/cmake/help/latest/command/export.html
Других решений пока нет …