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

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

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

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

Q&A

解決済

2回答

985閲覧

Makefileにて、include命令のときだけエラー

退会済みユーザー

退会済みユーザー

総合スコア0

makefile

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

0グッド

0クリップ

投稿2023/03/15 09:11

編集2023/03/15 09:18

実現したいこと

作業ディレクトリにあるサブディレクトリ内のMakefileを、作業ディレクトリ直下のMakefileから呼び出したい

前提

Gitのsubmodule機能を使っているので、サブディレクトリのMakefileを実行しなくてはならない状況です。以下はその再現になります。なお、サブディレクトリ内でmakeしたときは問題なくビルドできます。

試したこと

実際のものとは異なりますが、簡略化して再現したものです。
ディレクトリ階層↓

作業ディレクトリ(.) |-Sub | |-sub.c | '-Makefile |-Makefile '-main.c
  • ./Makefile

makefile

1include Sub/Makefile 2 3main.exe: main.o 4 cd Sub 5 make 6 cd .. 7 x86_64-w64-mingw32-gcc -shared -o $@ $^ Sub/sub.dll 8 9main.o: main.c 10 x86_64-w64-mingw32-gcc -c -o $@ $^
  • ./main.c

c

1#include <stdio.h> 2 3int add(int x , int y); 4 5int main() 6{ 7 const int x = 4 , y = 5; 8 printf("%d + %d = %d" , x , y , add(x , y)); 9 10 return 0; 11}
  • ./Sub/Makefile

makefile

1sub.dll: sub.o 2 x86_64-w64-mingw32-gcc -shared -o $@ $^ 3 4sub.o: sub.c 5 x86_64-w64-mingw32-gcc -c -o $@ $^
  • ./Sub/sub.c

c

1int add(int x , int y) { return x + y; }

発生したエラー

上図の作業ディレクトリ内でmakeするとmake: *** 'sub.o' に必要なターゲット 'sub.c' を make するルールがありません. 中止.となります。

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

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

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

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

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

Zuishin

2023/03/15 09:29 編集

新しい質問をするまで前の質問を放置する人。 解決になっていない意味不明な自己解決も多い。
退会済みユーザー

退会済みユーザー

2023/03/15 09:36

この質問に関係のあるコメントですか
Zuishin

2023/03/15 09:42

回答する人に役立つ情報なので関係は大きいですね。
guest

回答2

0

Makefileの実行部分は、1行ごとに独立したシェルで実行されますので、cdする場合は1行で書かないと駄目です。
1行実行し終わったら元のディレクトリーです。

Makefile

1main.exe: main.o 2 cd Sub; make 3 x86_64-w64-mingw32-gcc -shared -o $@ $^ Sub/sub.dll

他にも間違いが無いかどうかは見てません。

投稿2023/03/15 09:48

otn

総合スコア84505

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

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

otn

2023/03/15 10:23

include している意味が無い気がします。不要では?
guest

0

ベストアンサー

サブディレクトリの Makefile を include しても動きません。そのまま取り込んでもパスが合わないので。

incude を消して、以下のようにしましょう。

Makefile

1main.exe: main.o Sub 2 x86_64-w64-mingw32-gcc -shared -o $@ $< Sub/sub.dll 3 4Sub: 5 $(MAKE) -C $@

投稿2023/03/15 09:45

int32_t

総合スコア20850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問