在CMake中读取文件或打印消息
我试图读取文件的内容,并设置一个变量,条件是相对于CMakeLists.txt脚本文件是否存在文件。例如,我想有条件地使用驻留在磁盘上的文件的内容设置一个环境变量,如果它不存在,我想打印一条有用的消息在CMake中读取文件或打印消息,cmake,Cmake,我试图读取文件的内容,并设置一个变量,条件是相对于CMakeLists.txt脚本文件是否存在文件。例如,我想有条件地使用驻留在磁盘上的文件的内容设置一个环境变量,如果它不存在,我想打印一条有用的消息 if (EXISTS pkgconfig-environment) file(READ pkgconfig-environment LOCAL_PKG_CONFIG_PATH) set(ENV{PKG_CONFIG_PATH} ${LOCAL_PKG_CONFIG_PATH}) e
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附近的相对路径确定文件的绝对路径。要获得包含currentCMakeLists.txt文件的目录的完整路径,请使用:
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 ()