[解決済み] Makefile にセパレータがない?
2022-02-06 01:43:24
質問
以下のMakefileがうまく動かないのですが、何が起こっているのかわかりません。
CC = gcc
CFLAGS = -Wall -g
demo:
${CC} ${CFLAGS} demo.c -o demo
lib:
${CC} ${CFLAGS} lib.c -o lib
clean:
rm -f lib demo
Demoにはメイン関数があり、libにはdemoで使用されるメソッド群があります。
lib に -c フラグを追加しました。しかし、makeを実行すると、次のようになります。
Makefile:5: *** missing separator. Stop.
解決方法は?
エラーのあるアップデートの場合、その前の行にあるものを確認してください。
${CC}
コマンドを使用してください。多くの
make
プログラムでは
リアル
コマンドの前にタブ文字があり、8つのスペースを入れるエディタ(例えば)は、それらを壊してしまいます。これが、"Missing separator"エラーの原因であることが多いようです。
次のような書き起こしでわかると思います。このファイルでは
$(xyzzy)
:
xyzzy=echo
all:
$(xyzzy) hello
で、作ってみると、皆さんと同じようなエラーになるんです。
pax> make
makefile:3: *** missing separator. Stop.
しかし、編集してその4つのスペースをタブにすると、正常に動作するようになりました。
pax> make
echo hello
hello
また、ソースファイルをまとめようとするやり方にも問題がありますね。
を使用せずに
-c
のフラグを
gcc
とは別に実行ファイルを作成しようとします。
各
このようなコマンドはリンカーエラーを引き起こす可能性があります。(簡単な)ようなものが必要でしょう。
CC = gcc
CFLAGS = -Wall -g
# Just compile/link all files in one hit.
demo: demo.c lib.c
${CC} ${CFLAGS} -o demo demo.c lib.c
clean:
rm -f demo
または(少し複雑ですが)。
CC = gcc
CFLAGS1 = -Wall -g -c
CFLAGS2 = -g
# Link the two object files together.
demo: demo.o lib.o
${CC} ${CFLAGS2} -o demo demo.o lib.o
# Compile each source file to an object.
demo.o: demo.c
${CC} ${CFLAGS1} -o demo.o demo.c
lib.o: lib.c
${CC} ${CFLAGS1} -o lib.o lib.c
clean:
rm -f demo
最初の解決策の問題点は、片方だけが古くなった場合でも、不必要に両方のプログラムをコンパイルしてしまうことです。2番目の解決策は、もう少し賢い方法です。
関連
-
[解決済み】makefile:4。*** missing separator. 停止する
-
[解決済み】Makefileの中の.PHONYの目的は何ですか?
-
[解決済み] clang: error: linker command failed with exit code 1が表示されるのはなぜですか?
-
[解決済み】「構造体でもユニオンでもないものにメンバー'*******'を要求する」とはどういう意味ですか?
-
[解決済み】警告:組み込み関数'printf'の非互換な暗黙の宣言(デフォルトで有効]
-
[解決済み】Makeエラー:セパレータがない
-
[解決済み】0LLや0x0ULの意味は何ですか?
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない
-
[解決済み] GNU Makefile の変数割り当て =, ?=, :=, += の違いは何ですか?
-
[解決済み] makefile の記号 $@ と $< はどういう意味ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C 言語の添え字で配列の要素値を代入すると、配列でもポインタでもベクトルでもない値になる
-
[解決済み】 `S_ISREG()` とは何ですか、そして何をするのですか?
-
[解決済み】 switch case: error: case label does not reduce to an integer constant
-
[解決済み】ヒープ割り当てで初期化されていない値が作成された
-
[解決済み】C言語で多重定義を防ぐには?
-
[解決済み】C言語でint64_t型を表示する方法
-
[解決済み】argv[]をint型として取得するには?
-
[解決済み】「複数の定義」「最初に定義されたのはここです」エラーについて
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み】シンプルなC言語のscanfが機能しない?重複