Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在CMake中读取文件或打印消息_Cmake - Fatal编程技术网

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

在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

我试图读取文件的内容,并设置一个变量,条件是相对于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附近的相对路径确定文件的绝对路径。

要获得包含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 ()