少し前に、C++ 1xでXCodeを使用して大きなヘッダーライブラリを開始しました。ライブラリの現在のレイアウトは()のようなものです(ls -R sponf
からの部分的な出力)
sponf/sponf:
ancestors sponf.h sponf_utilities.h
categories sponf_children.h utilities
children sponf_macros.h
sponf/sponf/ancestors:
function.h meter.h set.h simulation.h
sponf/sponf/categories:
free_space.h prng.h random_distribution.h series.h
sponf/sponf/children:
distributions histogram.h random simulations
meters numeric series spaces
sponf/sponf/children/distributions:
arcsine_der.h exponential.h
box_muller.h uniform.h
sponf/sponf/children/meters:
accumulator.h timer.h
#... other subdirs of 'children' ...
sponf/sponf/utilities:
common_math.h limits.h string_const.h
#... other directories ...
このプロジェクトをCLionに移植したかったのですが、IDE(類似のAndroidStudio IDEに基づく))のようですが、いくつか問題が発生しています。
私はこの小さなプログラムをテストとして試しました:
#include <iostream>
#include <sponf/sponf.h>
using namespace std;
int main() {
using space = sponf::spaces::euclidean_free_space<double, 3>;
sponf::simulations::random_walk<space> rw;
rw.step(1);
std::cout << rw.position.value << std::endl;
return 0;
}
プログラムはコンパイルされ、正常に実行されます。ただし、CLionはspaces
名前空間(子ファイルの1つで宣言されています)もsimulations
名前空間も認識しません。どちらも赤くマークされており、コンテンツを検査したり、定義に移動したりできません ⌘-クリックなどなど...
"sponf.h"
を見ると見つかります
#ifndef sponf_h
#define sponf_h
/* The classes below are exported */
#pragma GCC visibility Push(default)
// include some of the standard library files
// ...
#include <Eigen/Eigen>
#include "sponf_macros.h"
#include "sponf_utilities.h"
#include "sponf_children.h"
#pragma GCC visibility pop
#endif
"sponf_children.h"
("sponf.h"
の横の最上位にあります)にいる間、
#ifndef sponf_locp_sponf_children_h
#define sponf_locp_sponf_children_h
namespace sponf {
// include some of the children
// ...
#include "children/spaces/euclidean_free_space.h"
#include "children/simulations/random_walk.h"
// include remaining children
// ...
}
#endif
各「子」ヘッダーには、対応する「祖先」または「カテゴリー」ヘッダー(「子」自体のスーパークラスを定義する)が含まれます。
すべてのサブディレクトリとヘッダーを簡単に見つけるオートコンプリート予測にもかかわらず、この最後のファイルのすべてのインクルードディレクティブは赤でマークされ、 ⌘-それらのいずれかをクリックすると、ポップアップメッセージが表示されます
移動する宣言が見つかりません
エディタの右側のリボンは、
'、'または)が必要です
)予想される
予想される宣言者
期待されるタイプ
行方不明;
予期しない記号
これは、各includeステートメントで同じではありません(それぞれが2からこれらすべてのエラーを生成します)。
一方、CLionは、ほぼ同じ構造を持つすべてのEigen
ヘッダーを完全に見つけることができます!
両方のライブラリを/opt/local/include
に入れ、それに応じてCMakeLists.txt
を変更しました
cmake_minimum_required(VERSION 2.8.4)
project(sponf)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
include_directories(/opt/local/include/sponf /opt/local/include/eigen3)
set(SOURCE_FILES main.cpp)
add_executable(sponf ${SOURCE_FILES})
CLionがプロジェクト構造を正しく解析できないのはなぜですか? XCode、/opt/local/include/sponf
環境に/opt/local/include/eigen3
およびHEADER_SEARCH_PATHS
を含めた後。プロジェクトの変数は、同じ正確なプログラムをコンパイルしながら任意のヘッダーを見つけることができます。
他に知っておくべきことはありますか?私はそれを間違っていますか、それともCLionはまだそれほど成熟しておらず、これはただのバグです。これはCLionとCMakeツールチェーンへの私の最初のアプローチなので、それに関するあらゆる種類の情報が非常に高く評価されます!
非常に長い質問でごめんなさい、私はそれをそれ以上縮小することができませんでした...よろしくお願いします!
ここで私はcigwin64を使用してWindowsで何をしたか。プロジェクトにEigenライブラリインクルードを使用したかった。固有ライブラリは/ usr/include/eigenに配置され、CMakeLists.txtを編集して追加します
include_directories("/usr/include/eigen")
その中に。これで、CLionはeigen lib内のすべてのソースファイルを見つけることができます。これもあなたが欲しかったものかもしれません。
Clion 2016.1.4にダウングレードすると問題が修正されます