Прочитать файл или распечатать сообщение в CMake - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь прочитать содержимое файла и установить переменную при условии, что файл существует относительно файла сценария CMakeLists.txt. Например, я хочу условно установить переменную среды с содержимым файла, который находится на диске, и если его там нет, я хочу напечатать полезное сообщение.

if (EXISTS pkgconfig-environment)
    file(READ pkgconfig-environment LOCAL_PKG_CONFIG_PATH)
    set(ENV{PKG_CONFIG_PATH} ${LOCAL_PKG_CONFIG_PATH})
else()
    message("
    I hope you know what you're doing with your pkg-config.
")
endif ()

Приведенная выше логика никогда не обнаруживаетфайл pkgconfig-environment, и вместо этого он всегда печатает сообщение. Файл можно прочитать в переменную cmake, но только в том случае, если он существует.

Есть две проблемы: во-первых, file(READ ...) иногда приводит к сбою сборки, поскольку файл не существует (мне все равноесли это каталог, и он не работает. Это не мой случай использования). Во-вторых, параметр, ожидаемый в вызове if(EXISTS path), вероятно, должен быть абсолютным путем, но я хотел, чтобы файл был проверен на существование относительно файла сценария CMakeLists.txt.

Учитывая, насколько четко в документации указано, чтопроверки на существование должны быть абсолютными путями, это заставляет меня думать, что есть какой-то способ определить абсолютный путь к файлу из относительного пути рядом с CMakeLists.txt.

1 Ответ

1 голос
/ 31 октября 2019

Чтобы получить полный путь к каталогу, содержащему текущий файл CMakeLists.txt, используйте ${CMAKE_CURRENT_LIST_DIR}:

if (EXISTS ${CMAKE_CURRENT_LIST_DIR}/pkgconfig-environment)
    file(READ ${CMAKE_CURRENT_LIST_DIR}/pkgconfig-environment LOCAL_PKG_CONFIG_PATH)
    set(ENV{PKG_CONFIG_PATH} ${LOCAL_PKG_CONFIG_PATH})
else()
    message("
    I hope you know what you're doing with your pkg-config.
")
endif ()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...