编译模块时,怎么在Makefile中指定.c文件中包含的.h文件的路径?

时间:2022-07-06 12:51:54
make使用隐晦规则,使用-I不知道应该加在什么位置;使用VPATH,vpath也找不到,求达人指教,不胜感激!

11 个解决方案

#1


试试CFLAGS

#2


gcc -Ixxxx

#3


main.c头文件使用尖括号:
#include <backtrace.h>
#include <foo.h>
#include <bar.h>

同一目录下的Makefile:
%.o: %.c
$(CC) $(CFLAGS) -c $^ -I ./configs

其中自定义头文件位于configs目录。
有兴趣可以看看:
http://www.latelee.org/programming-under-linux/113-multi-makefile-for-app.html

#4


引用 1 楼 justkk 的回复:
试试CFLAGS

我试过,报错说让我用EXTRA_CFLAGS,结果也没用

#5


引用 4 楼 taog416 的回复:
引用 1 楼 justkk 的回复:
试试CFLAGS

我试过,报错说让我用EXTRA_CFLAGS,结果也没用

这两个呢..
CPPFLAGS
CXXFLAGS

#6


引用 3 楼 subfate 的回复:
main.c头文件使用尖括号:
#include <backtrace.h>
#include <foo.h>
#include <bar.h>

同一目录下的Makefile:
%.o: %.c
$(CC) $(CFLAGS) -c $^ -I ./configs

其中自定义头文件位于configs目录。
有兴趣可以看看:
http://www.latelee.org/p……

我编译的是模块,我不知道怎么加CC,gcc命令,因为没有main函数。
我都是直接使用make -C xxx M=xxx modules命令。

#7


引用 5 楼 justkk 的回复:
引用 4 楼 taog416 的回复:
引用 1 楼 justkk 的回复:
试试CFLAGS

我试过,报错说让我用EXTRA_CFLAGS,结果也没用

这两个呢..
CPPFLAGS
CXXFLAGS

刚试过,也不行

#8


抱歉,没看清题目。
刚才试了一下,使用EXTRA_CFLAGS不行,网上有用gcc编译而不是make的,但是试了,错误更多。
如果实在不行,用双引号include头文件吧,在include中也可以指定头文件位置的。

#9


引用 8 楼 subfate 的回复:
抱歉,没看清题目。
刚才试了一下,使用EXTRA_CFLAGS不行,网上有用gcc编译而不是make的,但是试了,错误更多。
如果实在不行,用双引号include头文件吧,在include中也可以指定头文件位置的。

非常感谢,确实可以

#10


目录树:

|-- Makefile
|-- come.c
|-- configs
|   |-- come.h
|   `-- on.h
`-- on.c

1 directory, 5 files
其中configs为两个自定义头文件所在目录。其中come.c代码如下:


#include <linux/module.h>
#include <linux/init.h>

#include <come.h>
//#include "configs/come.h"
static int __init hello_init(void)
{
    printk(KERN_WARNING "Hello world!\n");
    return 0;
}

module_init(hello_init);

代码中使用了尖括号。

Makefile重要语句:

EXTRA_CFLAGS += $(DEBFLAGS)
EXTRA_CFLAGS += -I$(INCDIR)
$(MAKE) -C $(KERNELDIR) M=$(PWD) INCDIR=$(PWD)/configs modules;


由ldd3例子所得。
自己测试通过。
楼主不妨一试。

#11


使用gcc
gcc -I(./include)...

使用这个是可以制定程序的搜索路径
或者可以多个目录的搜索
INC_PATH := ./includde\
            ./common/include\

CFLAGS += $(foreach dir,$(INC_PATH),-I$(dir))

#1


试试CFLAGS

#2


gcc -Ixxxx

#3


main.c头文件使用尖括号:
#include <backtrace.h>
#include <foo.h>
#include <bar.h>

同一目录下的Makefile:
%.o: %.c
$(CC) $(CFLAGS) -c $^ -I ./configs

其中自定义头文件位于configs目录。
有兴趣可以看看:
http://www.latelee.org/programming-under-linux/113-multi-makefile-for-app.html

#4


引用 1 楼 justkk 的回复:
试试CFLAGS

我试过,报错说让我用EXTRA_CFLAGS,结果也没用

#5


引用 4 楼 taog416 的回复:
引用 1 楼 justkk 的回复:
试试CFLAGS

我试过,报错说让我用EXTRA_CFLAGS,结果也没用

这两个呢..
CPPFLAGS
CXXFLAGS

#6


引用 3 楼 subfate 的回复:
main.c头文件使用尖括号:
#include <backtrace.h>
#include <foo.h>
#include <bar.h>

同一目录下的Makefile:
%.o: %.c
$(CC) $(CFLAGS) -c $^ -I ./configs

其中自定义头文件位于configs目录。
有兴趣可以看看:
http://www.latelee.org/p……

我编译的是模块,我不知道怎么加CC,gcc命令,因为没有main函数。
我都是直接使用make -C xxx M=xxx modules命令。

#7


引用 5 楼 justkk 的回复:
引用 4 楼 taog416 的回复:
引用 1 楼 justkk 的回复:
试试CFLAGS

我试过,报错说让我用EXTRA_CFLAGS,结果也没用

这两个呢..
CPPFLAGS
CXXFLAGS

刚试过,也不行

#8


抱歉,没看清题目。
刚才试了一下,使用EXTRA_CFLAGS不行,网上有用gcc编译而不是make的,但是试了,错误更多。
如果实在不行,用双引号include头文件吧,在include中也可以指定头文件位置的。

#9


引用 8 楼 subfate 的回复:
抱歉,没看清题目。
刚才试了一下,使用EXTRA_CFLAGS不行,网上有用gcc编译而不是make的,但是试了,错误更多。
如果实在不行,用双引号include头文件吧,在include中也可以指定头文件位置的。

非常感谢,确实可以

#10


目录树:

|-- Makefile
|-- come.c
|-- configs
|   |-- come.h
|   `-- on.h
`-- on.c

1 directory, 5 files
其中configs为两个自定义头文件所在目录。其中come.c代码如下:


#include <linux/module.h>
#include <linux/init.h>

#include <come.h>
//#include "configs/come.h"
static int __init hello_init(void)
{
    printk(KERN_WARNING "Hello world!\n");
    return 0;
}

module_init(hello_init);

代码中使用了尖括号。

Makefile重要语句:

EXTRA_CFLAGS += $(DEBFLAGS)
EXTRA_CFLAGS += -I$(INCDIR)
$(MAKE) -C $(KERNELDIR) M=$(PWD) INCDIR=$(PWD)/configs modules;


由ldd3例子所得。
自己测试通过。
楼主不妨一试。

#11


使用gcc
gcc -I(./include)...

使用这个是可以制定程序的搜索路径
或者可以多个目录的搜索
INC_PATH := ./includde\
            ./common/include\

CFLAGS += $(foreach dir,$(INC_PATH),-I$(dir))