我正在使用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)
答案 0 :(得分:3)
在设置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}")
输出结果为:
C:\Program;Files\LLVM\include
C:\Program Files\LLVM\include
注意第一个输出行中的分号。这是一个包含2个项目的列表。
因此解决此问题的方法是修改LLVM_INCLUDE_DIRS
的创建方式。
答案 1 :(得分:3)
在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")
显然,第二种选择是更好的选择,因为它是
可以与您的示例中的变量评估一起使用(因为评估结果随后被引号括起,因此处理单个项目)
include_directories( “$ {LLVM_INCLUDE_DIRS}”)
这也适用,如果LLVM_INCLUDE_DIRS
是多个目录的列表,因为此列表中的项目将由;
显式分隔,这样就不需要将未引用的空格作为隐式列表项分离器。
旁注: 在我的CMake文件中使用硬编码路径名(无论出于何种原因)时,我通常使用正斜杠作为目录分隔符,因为这也适用于Windows,并且无需转义所有反斜杠。