我正在使用 CMake 来构建我的项目,并且有以下行:
include_directories(${LLVM_INCLUDE_DIRS})
Run Code Online (Sandbox Code Playgroud)
在计算 后LLVM_INCLUDE_DIRS,计算结果为:
include_directories(C:\Program Files\LLVM\include)
Run Code Online (Sandbox Code Playgroud)
问题是这被认为是两个包含目录,“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)
Run Code Online (Sandbox Code Playgroud)
在 CMake 中,
;),\是一个转义字符(要获得该符号,也需要对其进行转义)所以,在你的例子中,include_directories(C:\\Pogram Files\\LLVM\\include)与
include_directories( C:\\Program;Files\\LLVM\\include)
Run Code Online (Sandbox Code Playgroud)
即包含两个项目的列表。为了避免这种情况,要么
也逃避空白:
include_directories( C:\\Program\ Files\\LLVM\\include)或者
用引号将路径引起来:
include_directories( "C:\\Program Files\\LLVM\\include")
显然,第二个选项是更好的选择
可以与您的示例中的变量评估一起使用(因为评估结果随后被引号括起来,因此被视为单个项目)
include_directories("${LLVM_INCLUDE_DIRS}")
如果 是多个目录的列表,则这也有效,LLVM_INCLUDE_DIRS因为此列表中的项目将显式分隔,;以便不需要不带引号的空格作为隐式列表项分隔符。
旁注: 当在我的 CMake 文件中使用硬编码路径名(无论出于何种原因)时,我通常使用正斜杠作为目录分隔符,因为这也适用于 Windows,并且避免需要转义所有反斜杠。
这更有可能是 处LLVM_INCLUDE_DIRS设置时的错误,而不是 处的问题include_directories。
要检查这一点,请尝试致电include_directories("C:\\Program Files\\LLVM\\include")- 它应该可以正常工作。
问题似乎是LLVM_INCLUDE_DIRS在没有使用引号的情况下构建的。尝试运行以下命令:
set(LLVM_INCLUDE_DIRS C:\\Program Files\\LLVM\\include)
message("${LLVM_INCLUDE_DIRS}")
set(LLVM_INCLUDE_DIRS "C:\\Program Files\\LLVM\\include")
message("${LLVM_INCLUDE_DIRS}")
Run Code Online (Sandbox Code Playgroud)
输出是:
C:\Program;Files\LLVM\include
C:\Program Files\LLVM\include
Run Code Online (Sandbox Code Playgroud)
请注意第一输出行中的分号。这是一个包含 2 项的列表。
LLVM_INCLUDE_DIRS所以解决这个问题的方法就是修改创建方式。
| 归档时间: |
|
| 查看次数: |
6783 次 |
| 最近记录: |