我正在尝试读取文件的内容,并根据相对于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附近的相对路径确定文件的绝对路径。
答案 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 ()