gpt4 book ai didi

cmake - 使用带有空格的 CMake 的 include_directories 命令

转载 作者:行者123 更新时间:2023-12-01 11:01:47 38 4
gpt4 key购买 nike

我正在使用 CMake 来构建我的项目,我有以下几行:

include_directories(${LLVM_INCLUDE_DIRS})

其中,经过评估 LLVM_INCLUDE_DIRS , 评估为:
include_directories(C:\Program Files\LLVM\include)

问题是这被认为是两个包含目录,“C:\Program”和“Files\LLVM\include”。

知道如何解决这个问题吗?我尝试使用引号,但没有用。

编辑:原来问题出在文件 llvm-3.0\share\llvm\cmake\LLVMConfig.cmake .我用引号将以下路径括起来,问题解决了:
set(LLVM_INSTALL_PREFIX C:/Program Files/LLVM)
set(LLVM_INCLUDE_DIRS ${LLVM_INSTALL_PREFIX}/include)
set(LLVM_LIBRARY_DIRS ${LLVM_INSTALL_PREFIX}/lib)

最佳答案

在 CMake 中,

  • 空格是列表分隔符(如 ; ),
  • 评估变量名基本上是用它的内容替换变量名,
  • \是一个转义字符(为了得到符号,它也需要被转义)

  • 因此,在您的示例中, include_directories(C:\\Pogram Files\\LLVM\\include)是相同的
    include_directories( C:\\Program;Files\\LLVM\\include)

    也就是说,一个包含两个项目的列表。为了避免这种情况,要么
  • 也逃脱空白:
    include_directories( C:\\Program\ Files\\LLVM\\include)
  • 用引号将路径括起来:
    include_directories( "C:\\Program Files\\LLVM\\include")

  • 显然,第二种选择是更好的选择,因为它是
  • 更简单,更容易阅读和
  • 可以与您的示例中的变量评估一起使用(因为评估结果随后被引号包围,因此被视为单个项目)

    包含目录(“${LLVM_INCLUDE_DIRS}”)

  • 这也适用,如果 LLVM_INCLUDE_DIRS是一个包含多个目录的列表,因为此列表中的项目将被 ; 显式分隔。这样就不需要不带引号的空格作为隐式列表项分隔符。

    边注:
    在我的 CMake 文件中使用硬编码的路径名(无论出于何种原因)时,我通常使用正斜杠作为目录分隔符,因为这也适用于 Windows 并且避免了转义所有反斜杠的需要。

    关于cmake - 使用带有空格的 CMake 的 include_directories 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9964775/

    38 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com