web-dev-qa-db-ja.com

make印刷が「make: `all 'に対して何も実行されない」のはなぜですか?

これは「Hello.c」モジュールと「Makefile」です。 wokingディレクトリからmakeを実行すると、次のメッセージが表示されます。

make:「all」に対して何も実行されません。

これは「Hello.c」ファイルです。

#include <linux/module.h>    // included for all kernel modules
#include <linux/kernel.h>    // included for KERN_INFO
#include <linux/init.h>      // included for __init and __exit macros

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Lakshmanan");
MODULE_DESCRIPTION("A Simple Hello World module");

static int __init hello_init(void) {
  printk(KERN_INFO "Hello world!\n");
  return 0;    // Non-zero return means that the module couldn't be
}

static void __exit hello_cleanup(void) {
    printk(KERN_INFO "Cleaning up module.\n");
}   

module_init(hello_init); 
module_exit(hello_cleanup);

そして「Makefile」:

obj-m += hello.o

all:
    make -C /lib/modules/$(Shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(Shell uname -r)/build M=$(PWD) clean

私はすべての提案を試みましたが、私はこれをターミナルで手に入れました:

root@stupid-HP:/home/stupid/cpz/module$ pwd
/home/stupid/cpz/module
root@stupid-HP:/home/stupid/cpz/module$ ls
hello.c  Makefile
root@stupid-HP:/home/stupid/cpz/module$ make
make: Nothing to be done for `all'.
root@stupid-HP:/home/stupid/cpz/module$ make clean
make: Nothing to be done for `clean'.
root@stupid-HP:/home/stupid/cpz/module$ make clean all
make: Nothing to be done for `clean'.
make: Nothing to be done for `all'.
root@stupid-HP:/home/stupid/cpz/module$ ls
hello.c  Makefile
root@stupid-HP:/home/stupid/cpz/module$ make
make: Nothing to be done for `all'.
root@stupid-HP:/home/stupid/cpz/module$ vi hello.c  # modified again
root@stupid-HP:/home/stupid/cpz/module$ make clean
make: Nothing to be done for `clean'.
root@stupid-HP:/home/stupid/cpz/module$ make
make: Nothing to be done for `all'.
8
user55111

タイムスタンプに基づいて作品を作成します。ソースファイルの一部を変更する場合は、それらをコンパイルし、それに応じてイメージをビルドします。ソースファイルを変更しない場合、コンパイラはプロジェクトとは関係ありません。 makeは、新しいビルドが必要かどうかに関係なく毎回コンパイルするgccのようには機能しません。これは、プロジェクトにmakeを使用する多くの利点の1つです。

8
incompetent
  1. make cleanそしてmakeをもう一度
  2. makeファイル形式に従ってスペースとタブを確認します
  3. カーネルライブラリのパスを確認する
26
Dilip Kumar

Makefileのスペースを削除する必要があります。メイクファイルでは、タブのみを使用します。

コードをもう一度テストしましたが、タブで動作します

4
Hoang Pham

コンパイラーは、コードが既にコンパイルされており、コードに変更がない(最新である)ことを通知するだけで、コンパイルされません。コンパイラの組み込み機能です。ソースコードファイルに変更がない場合、コンパイラは時間を無駄にしません。

前にmake cleanを使用してmakeを変更するか、Hello.cを変更してプロジェクトをビルドします。

2
LPs

試してください:make cleanして実行可能ファイル(./a.out)を削除し、もう一度コンパイルしてみてください!あなたはいくつかのfuctionで何か変化があり、それを見ることができないかもしれません

1
sofronas

誰かが私と同じ問題に遭遇した場合に備えて:

フォルダーの1つが実行可能ファイルと同じ名前の場合、Eclipseは正しくビルドできません。この場合、何をしても、「何もしない」メッセージが常に表示されます。解決策は、フォルダーまたは実行可能ファイルの名前を変更することです。詳細は こちら をご覧ください。