1

我正在尝试在 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

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

4

3 回答 3

2

添加 CXX_FLAG

-I/usr/local/include

解决问题。

于 2013-10-25T07:32:10.680 回答
1

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

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

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

于 2019-07-17T23:47:01.213 回答
0

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

尝试改为例如

set(CMAKE_INCLUDE_PATH /usr/local/include)
于 2013-10-24T07:25:33.210 回答