Я пытаюсь прочитать содержимое файла и установить переменную при условии, что файл существует относительно файла сценария 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.