在CMake中读取文件或打印消息

时间:2019-10-30 21:22:25

标签: cmake

我正在尝试读取文件的内容,并根据相对于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 个答案:

答案 0 :(得分:1)

要获取包含最新 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 ()