【问题标题】:Compile with Clang++ ignores CMAKE_INCLUDE_PATH使用 Clang++ 编译会忽略 CMAKE_INCLUDE_PATH
【发布时间】:2013-11-02 18:39:53
【问题描述】:

我正在尝试在 OS X 上使用 clang++ 和 CXX_FLAGS“-Wall -stdlib=libc++ -std=c++11”编译一个 c++ 项目。该项目是一个 CMAKE 项目,需要包含 cln 和 ginac。但是,当我给出这样的包含语句时,编译器找不到相应的头文件:

#include <cln/cln.h>

#include <ginac/ginac.h>

虽然这两个库都安装在 /usr/local/lib 中并且它们的包含目录(/usr/local/include/cln 和 /usr/local/include/ginac)存在。我试过了

set(CMAKE_INCLUDE_PATH /usr/local/include/cln:/usr/local/include/ginac )

但它没有显示任何效果,错误信息保持不变:

fatal error: 'ginac/ginac.h' file not found
#include <ginac/ginac.h>
         ^

更新:

我设法为详细添加了编译器标志,这向我表明,clang 搜索所需标头的路径是错误的,因此问题似乎类似于如何更改这些路径的问题:

#include "..." search starts here:
#include <...> search starts here:
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/5.0/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks (framework directory)
End of search list.

而所需的标头仍在 /usr/local/include 中。

更新 2 添加 CXX_FLAG

-I/usr/local/include

解决了这个问题 - 我在哪里可以将其全局设置为默认值?

【问题讨论】:

    标签: c++ include-path clang++


    【解决方案1】:

    我只想补充一下我遇到的与作者几乎相同的问题,CMakeLists.txt 文件中的include_directories("/usr/local/include/something") 不起作用,但是我能够使用推荐的方法解决问题在CMakeLists.txt 文件中添加特定的编译器标志:

    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/local/include/something")
    

    这可能是 cmake 中的错误吗?这个问题只是切线相关,但可能对任何试图深入了解此问题的人有用: https://gitlab.kitware.com/cmake/cmake/issues/19120

    【讨论】:

      【解决方案2】:

      添加 CXX_FLAG

      -I/usr/local/include
      

      解决问题。

      【讨论】:

        【解决方案3】:

        您在CMakeFile.txt 中指定完整路径,包括子目录。所以这意味着当你包括例如&lt;cln/cln.h&gt; 预处理器将寻找 /usr/local/include/cln/cln/cln.h

        尝试改为例如

        set(CMAKE_INCLUDE_PATH /usr/local/include)
        

        【讨论】:

        • 好点,但这并没有解决它 - 对我来说,我对 CMakeLists.txt 所做的更改似乎没有任何效果。我打印出变量的设置,所有变量似乎都设置正确。我在试用期间使用了 make clean 甚至删除了 CMakeCache.txt,我还需要重置其他内容吗?
        • @Modass 创建一个新的子文件夹,然后执行例如cmake ..,这样你就可以确保你有一个干净的设置。这可能会有所帮助。
        • 好的,没有生成输出,我想我先修复它然后再回来
        • 我应该看到我的更改,例如到 CMAKE_CXX_FLAGS 在调用 ccmake ..(在 cmake ..之后)之后,对吗?因为不是这样,虽然我添加了 set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-Wall -stdlib=libc++ -std=c++11") 和 set(CMAKE_INCLUDE_PATH /usr/local/include)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-16
        • 2018-03-25
        • 1970-01-01
        • 2022-01-20
        • 2015-09-10
        • 2021-02-21
        • 2013-09-10
        相关资源
        最近更新 更多