我正在使用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)发布于 2012-04-01 14:09:05
在设置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注意第一个输出行中的分号.这是一个包含两个项目的列表。
因此,解决这个问题的方法是修改创建LLVM_INCLUDE_DIRS的方式。
发布于 2012-04-02 08:39:22
在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,并且避免了转义所有反斜杠的需要。
https://stackoverflow.com/questions/9964775
复制相似问题