タグ付けされた質問 「makefile」

makefileは、ビルドコントロール言語/ツールmakeの入力ファイルです。ターゲットと依存関係、およびターゲットを更新するために実行する関連コマンド(別名レシピ)を指定します。

12
Makefileからプログラムが存在するかどうかを確認する
プログラムがMakefileから呼び出し可能かどうかを確認するにはどうすればよいですか? (つまり、プログラムはパスに存在するか、呼び出し可能でなければなりません。) たとえば、インストールされているコンパイラを確認するために使用できます。 たとえば、この質問のようなものですが、基礎となるシェルがPOSIX互換であるとは想定していません。
115 makefile  gnu-make 

10
タブ文字なしで有効なMakefileを作成できますか?
target: dependencies command1 command2 私のシステム(Mac OS X)では、 make Makefileに各行の内容の前にタブ文字があることを要求するようですそうしcommandないと、構文エラーがスローされます。 Makefilesを作成または編集するときは、エディタをすべてのスペースに常時設定するので、これは厄介です。 タブ文字なしで有効なMakefileを作成できますか?



12
mkdirを使用しているときにmakefileで「ディレクトリがすでに存在する」エラーを防ぐ方法
makefileにディレクトリを生成する必要がありますが、簡単に無視できるにもかかわらず、「ディレクトリはすでに存在しています」というエラーが何度も表示されないようにしたいと思います。 私は主にmingw / msysを使用していますが、他のシェル/システムでも機能するものを望んでいます。 私はこれを試しましたが、うまくいきませんでした。 ifeq (,$(findstring $(OBJDIR),$(wildcard $(OBJDIR) ))) -mkdir $(OBJDIR) endif


6
「make」コマンドライン引数(-D)からCソースコードにマクロ定義を渡す方法は?
私は通常、 "make command line"から "makefile"にオプション-Dname = valueを使用してマクロ定義を渡します。定義はメイクファイル内からアクセスできます。 同様のコンパイラオプションを使用して、「makefile」から「ソースコード」にマクロ定義を渡します。-Dname = value(多くのコンパイラでサポートされています)。この定義は、ソースコードでアクセスできます。 私が今必要としているのは、メイクファイルのユーザーが、メイクファイルの内容を変更することなく、「make.exeコマンドライン」から「ソースコード」に任意のマクロ定義をすぐに渡せるようにすることです。 したがって、ユーザーは次のように入力できます。make -f mymakefile.mk -SOMEOPTION var = 5 次に、コードmain.cが直接varを参照できます。 int main() { int i = var; }
107 c  macros  makefile 


8
単一のソースファイルからいくつかのターゲットを生成するGNU Makefileルール
私は次のことをしようとしています。foo-bin1つの入力ファイルを受け取り、2つの出力ファイルを生成するプログラムがあります。このための単純なMakefileルールは次のようになります。 file-a.out file-b.out: input.in foo-bin input.in file-a.out file-b.out ただし、これはmake、両方のターゲットが同時に生成されることを決して意味しません。これはmakeシリアルで実行する場合は問題ありませんが、make -j16同じようにクレイジーにしようとすると問題が発生する可能性があります。 問題は、そのような場合に適切なMakefileルールを作成する方法があるかどうかです。明らかに、それはDAGを生成しますが、どういうわけか、GNU makeマニュアルは、このケースの処理方法を指定していません。 同じコードを2回実行し、1つの結果のみを生成することは問題外です。計算に時間がかかるためです(数時間と考えてください)。データファイルの一部のみを処理する方法を知らないGNUPLOTへの入力として頻繁に使用されるため、1つのファイルのみを出力することもかなり困難です。
105 makefile 

4
CFLAGSとCPPFLAGS
CFLAGS(またはC ++の場合はCXXFLAGS)はコンパイラー用であり、CPPFLAGSはプリプロセッサーによって使用されることを理解しています。 しかし、私はまだ違いを理解していません。 #includeでインクルードされるヘッダーファイルのインクルードパスを指定する必要があります-#includeはプリプロセッサディレクティブなので、プリプロセッサ(CPPFLAGS)だけが重要ですか? コンパイラーに追加のインクルードパスを与える必要があるのはどのような場合ですか? 一般に、プリプロセッサが必要なヘッダーファイルを見つけてインクルードする場合、なぜ追加のインクルードディレクトリについて通知する必要があるのですか?CFLAGSの用途は何ですか? (私の場合、実際にはこれらの両方でプログラムをコンパイルできるため、混乱を招きます... CFLAGS または CPPFLAGSを使用して(少なくともautoconfコンテキストで)目標を達成できます。何が得られますか?)


9
make fileを使用してディレクトリを作成する
私はmakefileが初めてなので、makefileを使用してディレクトリを作成します。私のプロジェクトディレクトリはこのようです +--Project +--output +--source +Testfile.cpp +Makefile すべてのオブジェクトを配置して、それぞれの出力フォルダーに出力したいと思います。コンパイルするとこんな感じのフォルダ構造を作りたい。 +--Project +--output +--debug (or release) +--objs +Testfile.o +Testfile (my executable file) +--source +Testfile.cpp +Makefile いくつかのオプションを試してみましたが、成功しませんでした。make fileを使用してディレクトリを作成するのを手伝ってください。私はあなたの検討のために私のメイクファイルを投稿しています。 #--------------------------------------------------------------------- # Input dirs, names, files #--------------------------------------------------------------------- OUTPUT_ROOT := output/ TITLE_NAME := TestProj ifdef DEBUG TITLE_NAME += _DEBUG else ifdef RELEASE TITLE_NAME += _RELEASE endif endif # …

16
定義に変数を含むGNU makeの目標/ターゲットをリストします
私は、変数から名前を計算することによって多数のターゲットをその場で作成するかなり大きなメイクファイルを持っています。(例:foo $(VAR):$(PREREQS))。これらの変数を展開した後、gnu makeがターゲットのリストを吐き出すことを確信できる方法はありますか? 任意のメイクファイルのターゲットを取得できるようにしたいのですが。シェルの補完関数を記述しようとしています。
100 makefile  gnu-make 

2
Makefileでシェルコマンドを使用する方法
ls他のコマンド(echo、rsyncなど)で結果を使用しようとしています: all: <Building, creating some .tgz files - removed for clarity> FILES = $(shell ls) echo $(FILES) しかし、私は得ます: make FILES = Makefile file1.tgz file2.tgz file3.tgz make: FILES: No such file or directory make: *** [all] Error 1 私が使ってみたことecho $$FILES、echo ${FILES}およびecho $(FILES)、運を持ちます。
99 bash  makefile  echo 

10
Makefile、ヘッダーの依存関係
ルールを持つメイクファイルがあるとしましょう %.o: %.c gcc -Wall -Iinclude ... ヘッダーファイルが変更されるたびに* .oを再構築してほしい。依存関係のリストを作成するのではなく、ヘッダーファイルが/include変更されるたびに、ディレクトリ内のすべてのオブジェクトを再構築する必要があります。 これに対応するためにルールを変更する良い方法は考えられません。私は提案を受け入れます。ヘッダーのリストをハードコーディングする必要がない場合のボーナスポイント

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.