質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
make

make は、ビルド作業を自動化するツールです。さまざまなファイルの最終変更時刻を比較し、従属するファイルよりも「ターゲット」のファイルが古いことがわかったときユーザーが設定していた命令を実行する事が可能です。

makefile

make は、プログラムのビルド作業を自動化するツールです。コンパイル、リンク、インストール等のルールを記述したテキストファイルをmakefileと呼び、このルールに従ってmakeが自動的にビルドを実行する。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

654閲覧

make(makefile)のちょっと踏み込んだ書き方

tometome

総合スコア27

make

make は、ビルド作業を自動化するツールです。さまざまなファイルの最終変更時刻を比較し、従属するファイルよりも「ターゲット」のファイルが古いことがわかったときユーザーが設定していた命令を実行する事が可能です。

makefile

make は、プログラムのビルド作業を自動化するツールです。コンパイル、リンク、インストール等のルールを記述したテキストファイルをmakefileと呼び、このルールに従ってmakeが自動的にビルドを実行する。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/07/05 13:42

編集2019/07/05 13:43

makeの使い方がまだいまいちわからない者です。まず以下のようなディレクトリツリーがあるとします。

lang

1directory - source/ - a.cpp 2 - b.cpp 3 - ... 4 5 - lib/ - a.o 6 - b.o 7 - ... 8 9 - makefile

この条件で、source/にある.cppをlib/%.oみたいに出力したいです。makefileと同じディレクトリにある.cppを同じディレクトリに出力するなら

lang

1.cpp.o: 2 g++ -c $< -I ...

でできることは知っています。この書き方を踏まえて、イメージとしては、次のように書きたいです。

lang

1source/%.cpp lib/%.o: //この構文は試してはいませんがこんな構文はありませんよね。イメージです。 2 g++ -c $< -o lib/%.o //これもイメージです。

それに加えてもう一つ、a.exeに依存されている$(OBJ)マクロの定義を"lib/にある.oファイルすべて"という風に定義したいです。イメージをを次に書きます。

lang

1OBJ = lib/の中にあるすべての.oファイル、個別のファイル名を書くのは面倒 2 3a.exe: $(OBJ) //$@はa.exeを、$^はOBJ(すべての.o)を指していると- 4 g++ -o $@ $^ //-認識しておりますが、間違っていたらご指摘ください。

つまり、ファイルを拡張子ごとに別々のディレクトリにセットしてmakeすればファイルの増減に関係なく実行ファイルが出来上がる凡庸的なmakefileを書きたいということです。もちろんその完成形を完成させて教えろと言っているのではなくて、上記の二点に関して答えを教えてほしいということです。makeの関数は、addprefixとwildcardだけ知っています。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/07/05 13:57

で、しつもんはなんでしょうか
pepperleaf

2019/07/05 15:01

環境は? Linuxみたいですが、また、gcc と make のバージョンは? 上記範囲だと、依存は少なそうですが、、昔は、色んなのがありました。
tometome

2019/07/06 00:31

>y_waiwai 様 質問は一言で書くのが難しいのです。「イメージです」と注釈をつけた後に書いたmakeの構文が質問欄に2つ(下から2つ)ありますよね。その構文は正しくないものだと思いますが私が何をしたいかはわかると思います。その2つの部分の正しい構文を教えてほしいのです。 >pepperleaf 様 環境、osはwindowsでMinGWを使っています。make 3.81、gccは8.2.0です。
guest

回答1

0

ベストアンサー

凡庸的なmakefileを書きたい

「凡庸」は「汎用」の間違いでは?

lib は既に存在するものとします。

makefile

1SRC = $(wildcard source/*.cpp) 2OBJ = $(patsubst source/%.cpp,lib/%.o,$(SRC)) 3 4a.exe: $(OBJ) 5 g++ -o $@ $^ 6 7lib/%.o: source/%.cpp 8 g++ -c -o $@ $< 9 10clean: 11 rm -f a.exe lib/*

投稿2019/07/06 00:34

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuma-s

2019/07/06 02:41

SRC = source/a.cpp source/b.cpp OBJ = $(patsubst source/%.cpp, lib/%.o, $(SRC)) all:   echo OBJ=$(OBJ) echo の前はタブにしてください。 これで試しても空になりますか? patsubst を patsubs とか書いていませんか? make のバージョンは何ですか? こちらは GNUL Make 4.2.1 です。
tometome

2019/07/06 02:49

すみません。先ほどの返信を削除依頼したのですが即削除はされないようで... 私の書き間違いで、その構文でちゃんとできました!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問