これは「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'.
タイムスタンプに基づいて作品を作成します。ソースファイルの一部を変更する場合は、それらをコンパイルし、それに応じてイメージをビルドします。ソースファイルを変更しない場合、コンパイラはプロジェクトとは関係ありません。 makeは、新しいビルドが必要かどうかに関係なく毎回コンパイルするgcc
のようには機能しません。これは、プロジェクトにmakeを使用する多くの利点の1つです。
make clean
そしてmake
をもう一度Makefileのスペースを削除する必要があります。メイクファイルでは、タブのみを使用します。
コードをもう一度テストしましたが、タブで動作します
コンパイラーは、コードが既にコンパイルされており、コードに変更がない(最新である)ことを通知するだけで、コンパイルされません。コンパイラの組み込み機能です。ソースコードファイルに変更がない場合、コンパイラは時間を無駄にしません。
前にmake clean
を使用してmake
を変更するか、Hello.c
を変更してプロジェクトをビルドします。
試してください:make cleanして実行可能ファイル(./a.out)を削除し、もう一度コンパイルしてみてください!あなたはいくつかのfuctionで何か変化があり、それを見ることができないかもしれません
誰かが私と同じ問題に遭遇した場合に備えて:
フォルダーの1つが実行可能ファイルと同じ名前の場合、Eclipseは正しくビルドできません。この場合、何をしても、「何もしない」メッセージが常に表示されます。解決策は、フォルダーまたは実行可能ファイルの名前を変更することです。詳細は こちら をご覧ください。