如何在makefile中指定路径

时间:2022-10-02 12:52:02
RT. 我现在在写makefile. 文件结构是这样的: 整个工程是一个文件夹, 包含"source"(C文件夹), "include"(头文件夹)文件夹和makefile文件.也就是说makefile是和两个文件夹处于平行结构
我现在不知道怎么在makefile中指定C文件和头文件的路径.
请大侠赐教

9 个解决方案

#1


设置变量,如:
OBJ_DIR = ./objs
SRC_DIR = ./src

指定目标文件:
OBJS = \
     $(OBJ_DIR)/aaa.o \
     $(OBJ_DIR)/bbb.o 

后面对于生成.o文件:
$(OBJ_DIR)/%.o:$(SRC_DIR)/%.c

#2


引用 1 楼 arnold9009 的回复:
设置变量,如:
OBJ_DIR = ./objs
SRC_DIR = ./src

指定目标文件:
OBJS = \
     $(OBJ_DIR)/aaa.o \
     $(OBJ_DIR)/bbb.o 

后面对于生成.o文件:
$(OBJ_DIR)/%.o:$(SRC_DIR)/%.c

但是头文件怎么办呢?
不可能一个一个加吧?
能用vpath 么?我用了,但是有报错,没用对

#3


头文件所在目录用-I选项添加,具体搜索“gcc编译选项"

#4


这样就行了。
CC = gcc

DIST = main
CFLAGS = -g -pg
LIBS = -g -pg
SOURCES = $(wildcard *.c)
OBJS = $(SOURCES:%.c=%.o)

all:$(OBJS)
        gcc -o $(DIST) $(OBJS) $(LIBS)

clean:
        rm $(DIST) $(OBJS)

#5


引用 3 楼 joeblackzqq 的回复:
头文件所在目录用-I选项添加,具体搜索“gcc编译选项"

+1.
INC_DIR=./include
指定头文件目录时用编译器的-I参数,-I$(INC_DIR)

#6


引用 4 楼 qq120848369 的回复:
这样就行了。C/C++ code
CC = gcc

DIST = main
CFLAGS = -g -pg
LIBS = -g -pg
SOURCES = $(wildcard *.c)
OBJS = $(SOURCES:%.c=%.o)

all:$(OBJS)
        gcc -o $(DIST) $(OBJS) $(LIBS)

clean:
        rm $(DIST……

CFLAGS = -g -pg
LIBS = -g -pg
这两句是干什么的?求赐教

#7


引用 5 楼 aijianmeng 的回复:
引用 3 楼 joeblackzqq 的回复:

头文件所在目录用-I选项添加,具体搜索“gcc编译选项"

+1.
INC_DIR=./include
指定头文件目录时用编译器的-I参数,-I$(INC_DIR)

如果我还需要包含别人的头文件,并且是放在其他路径下,这个该怎么办呢?
可以用 INC_DIR +=./(其他路径)  这样么???

#8


引用 6 楼 citylove 的回复:
引用 4 楼 qq120848369 的回复:

这样就行了。C/C++ code
CC = gcc

DIST = main
CFLAGS = -g -pg
LIBS = -g -pg
SOURCES = $(wildcard *.c)
OBJS = $(SOURCES:%.c=%.o)

all:$(OBJS)
gcc -o $(DIST) $(OBJS) $(LIBS……


CFLAGS是编译选项.
LIBS是链接选项.

这个makefile的特点就是隐式编译, 显示链接, 很强大的

#9


引用 8 楼 qq120848369 的回复:
引用 6 楼 citylove 的回复:
引用 4 楼 qq120848369 的回复:

这样就行了。C/C++ code
CC = gcc

DIST = main
CFLAGS = -g -pg
LIBS = -g -pg
SOURCES = $(wildcard *.c)
OBJS = $(SOURCES:%.c=%.o)

all:$(OBJS)
gcc -o……

其实我想问的是后面的“-g -pg”是干什么的

#1


设置变量,如:
OBJ_DIR = ./objs
SRC_DIR = ./src

指定目标文件:
OBJS = \
     $(OBJ_DIR)/aaa.o \
     $(OBJ_DIR)/bbb.o 

后面对于生成.o文件:
$(OBJ_DIR)/%.o:$(SRC_DIR)/%.c

#2


引用 1 楼 arnold9009 的回复:
设置变量,如:
OBJ_DIR = ./objs
SRC_DIR = ./src

指定目标文件:
OBJS = \
     $(OBJ_DIR)/aaa.o \
     $(OBJ_DIR)/bbb.o 

后面对于生成.o文件:
$(OBJ_DIR)/%.o:$(SRC_DIR)/%.c

但是头文件怎么办呢?
不可能一个一个加吧?
能用vpath 么?我用了,但是有报错,没用对

#3


头文件所在目录用-I选项添加,具体搜索“gcc编译选项"

#4


这样就行了。
CC = gcc

DIST = main
CFLAGS = -g -pg
LIBS = -g -pg
SOURCES = $(wildcard *.c)
OBJS = $(SOURCES:%.c=%.o)

all:$(OBJS)
        gcc -o $(DIST) $(OBJS) $(LIBS)

clean:
        rm $(DIST) $(OBJS)

#5


引用 3 楼 joeblackzqq 的回复:
头文件所在目录用-I选项添加,具体搜索“gcc编译选项"

+1.
INC_DIR=./include
指定头文件目录时用编译器的-I参数,-I$(INC_DIR)

#6


引用 4 楼 qq120848369 的回复:
这样就行了。C/C++ code
CC = gcc

DIST = main
CFLAGS = -g -pg
LIBS = -g -pg
SOURCES = $(wildcard *.c)
OBJS = $(SOURCES:%.c=%.o)

all:$(OBJS)
        gcc -o $(DIST) $(OBJS) $(LIBS)

clean:
        rm $(DIST……

CFLAGS = -g -pg
LIBS = -g -pg
这两句是干什么的?求赐教

#7


引用 5 楼 aijianmeng 的回复:
引用 3 楼 joeblackzqq 的回复:

头文件所在目录用-I选项添加,具体搜索“gcc编译选项"

+1.
INC_DIR=./include
指定头文件目录时用编译器的-I参数,-I$(INC_DIR)

如果我还需要包含别人的头文件,并且是放在其他路径下,这个该怎么办呢?
可以用 INC_DIR +=./(其他路径)  这样么???

#8


引用 6 楼 citylove 的回复:
引用 4 楼 qq120848369 的回复:

这样就行了。C/C++ code
CC = gcc

DIST = main
CFLAGS = -g -pg
LIBS = -g -pg
SOURCES = $(wildcard *.c)
OBJS = $(SOURCES:%.c=%.o)

all:$(OBJS)
gcc -o $(DIST) $(OBJS) $(LIBS……


CFLAGS是编译选项.
LIBS是链接选项.

这个makefile的特点就是隐式编译, 显示链接, 很强大的

#9


引用 8 楼 qq120848369 的回复:
引用 6 楼 citylove 的回复:
引用 4 楼 qq120848369 的回复:

这样就行了。C/C++ code
CC = gcc

DIST = main
CFLAGS = -g -pg
LIBS = -g -pg
SOURCES = $(wildcard *.c)
OBJS = $(SOURCES:%.c=%.o)

all:$(OBJS)
gcc -o……

其实我想问的是后面的“-g -pg”是干什么的