我正在使用 CMake 来构建我的项目,并且有以下行:
include_directories(${LLVM_INCLUDE_DIRS})
评估后LLVM_INCLUDE_DIRS
,评估为:
include_directories(C:\Program Files\LLVM\include)
问题在于,这被认为是两个包含目录,“C:\Program”和“Files\LLVM\include”。
知道如何解决这个问题吗?我尝试使用引号,但没有成功。
EDIT:原来问题出在文件上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)
即包含两个项目的列表。为了避免这种情况,要么
显然,第二个选项是更好的选择
这也有效,如果LLVM_INCLUDE_DIRS
是多个目录的列表,因为此列表中的项目将显式分隔;
这样就不需要未加引号的空格作为隐式列表项分隔符。
边注:当在我的 CMake 文件中使用硬编码路径名(无论出于何种原因)时,我通常使用正斜杠作为目录分隔符,因为这也适用于 Windows,并且避免需要转义所有反斜杠。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)