2017-06-13 1 views
1

ヘッダーファイルを含める際に問題があります。CMake相対パスではなくルートディレクトリからヘッダファイルを常に見つけるためにsrcルートディレクトリを設定するには?

エラーメッセージ

In file included from /path/to/src/main.cpp:1: 
/path/to/src/dirA/testA.h:1:10: fatal error: 'common/util.h' file not found 
#include "common/util.h" 

ディレクトリ

├── dirA 
│ └── testA.h 
├── common 
│ └── util.h 
└── main.cpp 

main.cppに

#include "dirA/testA.h" 

int main() 
{} 

testA.h

#include "common/util.h" // <--- Here is the error point 

CMakeLists.txt

cmake_minimum_required(VERSION 2.8) 

add_definitions("-std=c++11") 

add_executable(main 
    main.cpp 
) 

は、私は次のようで結構ですが、私は、ファイルパスの関係を考えることをしたくないことがわかりました。

#include "../common/util.h" 

更新マークFarrugiaの答えに1人の

おかげで、ビルドエラーが解消しました。しかし、私は "util/util.h"よりも "common/util.h"の方が好きです。なぜなら、そのパスは分かりやすいからです。また、重複した定義を避けることもできます。

testA.h

#include "util.h" 

CMakeLists.txt

cmake_minimum_required(VERSION 2.8) 

add_definitions("-std=c++11") 

include_directories("common") 

add_executable(main 
    main.cpp 
) 
+0

新しい質問に回答するために私の回答を編集しました – snoopy

答えて

1

CMakeののinclude_directoriesコマンドを使用します。

https://cmake.org/cmake/help/v3.0/command/include_directories.html

以下は、プロジェクト全体commonディレクトリ内のすべてのファイルが含まれます:

include_directories(common); 

を使用し、このように:

#include <util.h> 

それとも、フォルダを使用する場合#include指示:

あなたは次の操作を行うことができます

この方法:あなたが2.8よりも古い(非常に古いで立ち往生している場合を除き

#include <common/util.h> 
+0

パーフェクト!これはまさに私が必要としていたものです。どうもありがとうございます! – zono

1

include_directories間は、ここに動作します。可能な場合は常にコマンドのtarget_*形式を選ぶべき新しいCMakeのバージョンでは

cmake_minimum_required(VERSION 3.1) 

add_executable(main 
    main.cpp 
) 
target_include_directories(main PUBLIC .) 
set_property(TARGET main PROPERTY CXX_STANDARD 11) 
set_property(TARGET main PROPERTY CXX_STANDARD_REQUIRED ON) 

:10)CMakeのバージョン、target_include_directoriesはこれを解決するための優先コマンドでなければなりません。これは、ソースファイルの物理的レイアウト(これは古いディレクトリベースのコマンドを使用することになります)に基づいてビルドを管理することは、大規模なプロジェクトにとっては特に重要です。新しいコマンドでは、依存するターゲットに一時的にプロパティを継承するなど、より複雑なビルドには非常に便利な機能もいくつか追加されています。

CMake 3.1以降を使用する自由がある場合は、std=c++11コンパイルフラグの明示的な設定を上記の移植性の高いコードに置き換えることもできます。

+0

ありがとうございます。私のcmakeはv3.8.2です。私があなたが言及したことを調べます。 – zono

関連する問題