2017-08-03 9 views
1

BUCKビルドツールを使用すると、ライブラリのヘッダー名前空間を定義できます。私は、このディレクトリ構造を持つLIBAと呼ばれるライブラリ、持っている場合たとえば、:BUCKのheader_namespaceに相当するcmakeはありますか?

root 
    include 
     a.h 
    src 
     a.cpp 

を私はそのような私ができるLIBAを使用して別のプロジェクトであること、examples/liba、たとえば、としてライブラリにheader_namespaceを設定することができます

#include "examples/liba/a.h" 

それはまた私がより読みやすい形で整理を含ん維持しながら、私のプロジェクトに簡略化されたディレクトリ構造を維持するために私をことができますので、これはいいです。

CMakeはこのようなものを提供していますか?私はまだ何か似たものを見つけていない。私の目標は、BUCKとCMakeがJava(BUCKの依存関係の1つ)なしでシステムを構築しやすくするためにファイルをビルドさせることです。

答えて

1

いいえ、CMakeにはこのような機能はありません。

ヘッダーを管理する標準的な方法は、他のコードと競合しないようにファイルシステム内で整理することです。

root 
    include 
     liba 
      a.h 
    src 
     a.cpp 

その後、それは単純な問題である:

include_directories(include) 

以上、

target_include_directories(liba PUBLIC include) 

または、すべての最も近代的な、単純に作ると言う

target_include_directories(liba PUBLIC 
    "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>" 
    "$<INSTALL_INTERFACE:include>") 

を使用している人へのインクルードパスにありますサブディレクトリincludeの内容は、現在のソースディレクトリにあり、libaサブディレクトリ(インストールプレフィックスに関連して解釈される)の内容はincludeのサブディレクトリにインストールされます。

次にインストールは、通常のようなものです:ソースの下にあるすべてのものをインストールし、ヘッダーの

install(DIRECTORY include/ 
    DESTINATION include) 

ディレクトリと

install(TARGETS liba 
    RUNTIME DESTINATION bin 
    LIBRARY DESTINATION lib 
    ARCHIVE DESTINATION lib) 

実際のライブラリターゲットの(「libliba.a」または "が含まれますlibliba.so ")。 GNU標準フォルダ名にはinclude(GNUInstallDirs)の変数を使用する方が良いでしょう。あなたのコードで

、すべての回であなただけの普通の競合のない方法でコードを参照してください:あなたがで本当に悪いでない限り、ファイルまたはコード上の任意の紛争になることはありません

#include "liba/a.h" 

ので、ありますネーミング!

+0

すべての情報をお寄せいただきありがとうございます!私はそれに応じて戦略を間違いなく更新します。 – Craig

関連する問題