2016-07-20 4 views
-1

CMakeを使用してCでコーディングしています。別のファイルにsobreプリプロセッサマクロを定義したいと思います。これは、自分のアプリケーションのメイン設定ファイルを持つことを目的としています。.configファイル内にプリプロセッサマクロを定義します。

私はカーネルの.configファイルと同様のことをやっていましたが、定義付きのファイルをコンパイラに渡す方法が見つかりませんでした。私は単一のマクロを定義するためにgccのオプション-Dを知っていますが、ファイルをimputとして受け入れません。私はCMakeのADD_DEFINITIONSユーティリティも知っていますが、ファイルではなく、一定量のマクロで使用することも想定されています。

まとめると、私はマクロ定義でファイルの.configを定義したいと思います:

CONFIG_MACRO_A=y 
CONFIG_MACRO_B=y 
# CONFIG_MACRO_C is not set 
CONFIG_MACRO_C=y 

とコンパイル時間のプリプロセッサマクロとして各ラインを採用。

ありがとうございました。

+2

あなたは 'config_file'を使用することができます。 http://stackoverflow.com/questions/38419876/cmake-generate-config-h-like-from-autoconf/38423317#38423317およびhttp://stackoverflow.com/questions/647892/cmake-how-to-checkを確認してください。 -header-files-and-library-functions-in-autotools – usr1234567

答えて

0

は、私は、少なくとも三つの可能性を参照してください。

  1. 、通常のヘッダファイルのスタイルで、あなたの設定ファイルを作成し、それを含めるすなわち

    #define CONFIG_MACRO_A y 
    #define CONFIG_MACRO_B y 
    //#define CONFIG_MACRO_C# C is not set 
    #define CONFIG_MACRO_D y 
    
  2. 使用などの設定ファイルのメカニズム@ usr1234567が提案されました。

  3. コンパイラコール(つまり、makefile)でシェル処理を使用します。 bashのために:

    gcc $(CFLAGS) `while read mac; do echo -n "-D$mac "; done < <(grep -v "#" mymacro) ` $(TARGET) 
    
+0

ありがとう!私の使用例では、3番目のオプションがトリックを行います。主な目的は、configファイルを「読み込み可能」にして、#defineまたは#cmakedefineの使用を避けたいということでした。 –

関連する問題