1

OS X で clang++ と CXX_FLAGS "-Wall -stdlib=libc++ -std=c++11" を使用して C++ プロジェクトをコンパイルしようとしています。このプロジェクトは CMAKE プロジェクトであり、cln と ginac を含める必要があります。ただし、次のような include ステートメントを指定すると、コンパイラは対応するヘッダーを見つけることができません。

#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>
         ^

アップデート:

verbose のコンパイラ フラグを追加することができました。これは、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

1

ファイルが機能しなかった著者とほぼ同じ問題に遭遇したという議論に追加したいだけですが、特定のコンパイラフラグをファイルに追加することで推奨されるアプローチを使用して問題を回避できinclude_directories("/usr/local/include/something")ました。CMakeLists.txtCMakeLists.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 に答える