使用通配符我非常熟悉的Makefile文件和內核模塊,但最近我在我的Makefile的一個問題,即沒有任何意義 - 上使用通配符。 爲了演示這一點,我從頭開始編譯hello world內核模塊。 目錄結構是這樣的:無法在內核模塊的makefile
hello_mod/
|
--- hello.c
|
--- Makefile
下面是實際的生成文件:
CFILES := $(wildcard hello.c*)
#CFILES := hello.c
OBJS := $(CFILES:.c=.o)
KSRC := /lib/modules/$(shell uname -r)/build
obj-m += hello_world.o
hello_world-y := $(OBJS)
all:
@echo $(CFILES)
$(MAKE) -C $(KSRC) M=$$PWD modules
clean:
$(MAKE) -C $(KSRC) M=$$PWD clean
.PHONY: clean
的問題是,即使評論$(CFILES)和註釋掉$(CFILES)是完全同樣,構建使用第一$(CFILES),出現以下錯誤失敗:
*** No rule to make target `/home/test/hello_mod/hello_world.c', needed by
/home/test/hello_mod/hello_world.o'. Stop.
如果評論$(CFILES)時,它完美的作品。
如果有人想測試這一點,我包括源爲世界你好源是hello.c中:
#include <linux/kernel.h>
#include <linux/module.h>
static int mod_init()
{
printk("Hello\n");
return 0;
}
static void mod_exit()
{
printk("Bye world\n");
}
module_init(mod_init);
module_exit(mod_exit);
有誰知道爲什麼它表現爲這樣?我需要在makefile中使用通配符。任何幫助將不勝感激。
您可能希望看到這個答案 http://stackoverflow.com/questions/6577176/makefiles-and-wildcards –
這個問題無關與我,他/她在規則中使用「*」。我使用通配符運算符將源列出到變量中。 – bjxt
爲什麼在'CFILES'定義中使用'$(dir)'?你用'remake -x'來調試你的'Makefile'嗎? –