2016-10-07 4 views
1

が含まれるようにディレクトリの下のすべてのファイルを強制的に:メイクファイル:私の現在のディレクトリは以下のように見えるヘッダ

root 
    |___src 
    |  | 
    |  |____Makefile 
    |  |____a.cpp 
    |  |____b.cpp 
    |  |____c.h 
    |  |____tests 
    |    | 
    |______________|____test.cpp 

CH

+0

唯一の方法はテストディレクトリ下のすべてのファイルに '#include" ../ c.h "を手動で書くことです – igagis

+0

どのコンパイラを使用していますか? – Beta

+0

...ソースファイルを修正したいのですか、あるいは単にそれらが 'include'ディレクティブを持っているかのようにコンパイルしますか? – Beta

答えて

1

あなたは私の質問のいずれにも答えていないので、推測をしなければなりません。

これは、あなたが探しているものかもしれ:

%.o: %.cpp 
    @$(CXX) -c $< -o [email protected] 

tests/%.o: tests/%.cpp 
    @$(CXX) -include c.h -c $< -o [email protected] 

EDIT:

ソースファイルの先頭に#include "c.h"を挿入したい場合は、このsedコマンドを使用することができます。あなたは何度もそう多くのをしないことを確認したい場合は

sed -i "" '1{h;s/.*/#include "c.h"/;G;}' filename 

、あなたはこれを行うことができます。

sed -i "" '1{h;s/.*/#include "c.h"/;G;s/\(.*\)\n\1$/\1/;}' filename 

メイクファイルでこれを行う方法はいくつかあります。

tests/%.o: tests/%.cpp 
    @sed -i "" '1{h;s/.*/#include "c.h"/;G;s/\(.*\)\n\1$/\1/;}' $< 
    @$(CXX) -c $< -o [email protected] 

ただし、各ソースファイルでsedを1回実行すると、Makeがうまく動作します。これを行うことができますが、優先順位についてより慎重な考えが必要です。

+0

申し訳ありません私はなぜ私がこれをやっているのか説明してほしいと思った。 どのコンパイラを使用していますか?私はg ++を使用しています ソースファイルを変更したいのですか、またはincludeディレクティブを持っているかのようにコンパイルしますか?理想的には、私はソースファイルを変更したい。 – Amr

0

gccが含まれるようにテストディレクトリの下のすべてのファイルを強制的にメイクファイルから方法はあるとclangサポート-include fileコマンドラインオプション。

gcc documentation

-includeファイル

プロセスファイルの#include "ファイル" であれば、プライマリソースファイルの最初の行として現れました。ただし、最初に検索されるディレクトリは、メインソースファイルを含むディレクトリではなく、プリプロセッサの作業ディレクトリです。そこに見つからなければ、#include "..."検索チェーンの残りの部分で通常どおり検索されます。

他のコンパイラにも同様のオプションがあります。

+0

これは、すべてのファイル、つまりa.cpp、b.cpp、およびtest.cppにこのインクルードを追加しませんか? – Amr

+0

@Amrコンパイル中の翻訳ユニットへのヘッダを含みます。 –

関連する問題