10

プロジェクトをセットアップして、その完全な機能を網羅するいくつかのダイナミックライブラリを構築しようとしています。ライブラリごとにサブフォルダがあります。サブフォルダーライブラリは相互に依存しているため、相互に関数を参照する必要があります。プロジェクトでエラーなしでCMakeを実行できたようですが、ビルドに行くと、ヘッダーがお互いを見つけるのに問題があります。ビルド時に、インクルードパスが正しく設定されていないようです。どうすればこれを修正できますか?インクルードパスを正しく設定するために必要な追加の手順はありますか?

構造はこんな感じ

root
    CMakeLists.txt
    bin
    lib
    lib0
        CMakeLists.txt
        lib0.h
        lib0.cpp
    lib1
        CMakeLists.txt
        lib1.h
        lib1.cpp
    ...

ルートディレクトリのCMakeLists.txtには、次のような宣言があります。

set(ROOT /blah/blah/root)    

include_directories(${ROOT}/lib0)
include_directories(${ROOT}/lib1)

add_subdirectory(lib0)
add_subdirectory(lib1)

サブフォルダーのCMakeLists.txtには、次のものがあります。

set(lib0_SOURCES "")
list(APPEND lib0_SOURCES lib0.cpp)
add_library(lib0_lib ${lib0_SOURCES})

そして、ライブラリの私のヘッダーは次のようになります(これがlib0.hであると仮定します):

#include "lib1/lib1.h"
...

CMakeはエラーなしで正常に動作しますが、コンパイルしようとすると、次のようなエラーが発生します。

In file included from /blah/blah/root/lib0/lib0.cpp:1:0:
/blah/blah/root/lib0/lib0.h:1:30: fatal error: lib1/lib1.h: No such file or directory
4

3 に答える 3

12

あなたはGCCにそう言った#include the file "lib1/lib1.h"。ビルドすると、CMakeは「$ {ROOT}/lib0」と「${ROOT}/lib1」で追加のヘッダーを探すように要求します

したがって、GCCは「${ROOT}/lib0/lib1/lib1.h」と「${ROOT}/lib1/lib1/lib1.h」を試しています。うん、動作しません。

それを修正するには:

  • ルートCMakeLists.txtで使用できます:include_directories(".")
  • CMakeListsを保持しますが#include the file "lib1.h"
  • CMakeListsのinclude_directoriesを削除し、#include the file "../lib1/lib1.h"

IMO、私は最初のオプションに行きます!

于 2012-08-17T20:27:51.427 に答える
2

私はCMakeに、C /C++のROOTディレクトリにルックアップを含めることを検討するように依頼します。

set(ROOT /blah/blah/root)

include_directories(${ROOT})

add_subdirectory(lib0)
add_subdirectory(lib1)

次に、C / C ++では、二重引用符('"')ではなく山形括弧('<'および'>')を使用します。

#include <lib1/lib1.h>
于 2012-08-19T18:40:50.847 に答える
1

二重命名スキームを使用するか、インクルードパスとしてベースディレクトリを指定する必要があります。

root
    CMakeLists.txt
    bin
    lib
    lib0
        CMakeLists.txt
        lib0.cpp
        lib0
            lib0.h
    lib1
        CMakeLists.txt
        lib1.cpp
        lib1
            lib1.h
    ...
于 2012-08-17T20:12:46.510 に答える