C++ 转换为makefile
如何将其转换为makefile?这就是我现在拥有的:C++ 转换为makefile,c++,gcc,C++,Gcc,如何将其转换为makefile?这就是我现在拥有的: gcc code.c -I/opt/local/include -L/opt/local/lib -lnetcdf -lm -fpic -o code 请注意,下面的makefile可以工作 IDIR =/opt/local/include CC=gcc CFLAGS=-I$(IDIR) ODIR=obj LDIR =/opt/local/lib LIBS=-lm code: $(OBJ) gcc -o $@ $^ $(CFL
gcc code.c -I/opt/local/include -L/opt/local/lib -lnetcdf -lm -fpic -o code
请注意,下面的makefile可以工作
IDIR =/opt/local/include
CC=gcc
CFLAGS=-I$(IDIR)
ODIR=obj
LDIR =/opt/local/lib
LIBS=-lm
code: $(OBJ)
gcc -o $@ $^ $(CFLAGS) $(LIBS)
.PHONY: clean
clean:
rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~
然后,只需将变量添加到makefile中。比如说
code: code.o
gcc code.o -o code
code.o: code.c
gcc -c code.c -I/opt/local/include -L/opt/local/lib -lnetcdf -lm -fpic
clean:
rm *.o code
我使用更通用的makefile:
OBJ=code.o
CC=gcc
IDIR=/opt/local/include
LDIR=/opt/local/lib
CFLAGS=-lnetcdf -lm -fpic
code: $(OBJ)
$(CC) $(OBJ) -o code
code.o: code.c
$(CC) -c code.c -I$(IDIR) -L$(LDIR) $(CFLAGS)
clean:
rm *.o code
注意:
您没有在Makefile中定义
OBJ
。请查看我的答案,它可能看起来更复杂,但一旦您理解它,它将在许多项目中为您服务,只需稍加修改。
NAME := $(shell basename $(shell pwd))
OBJ := $(NAME).o
CC := gcc
CFLAGS := -fpic
LIBS := m netcdf
LIB_DIRS := lib_dirs
SRC_DIRS := src
INCLUDE_DIRS := inc
LIB_FLAGS := $(patsubst %,-L%, $(LIB_DIRS))
LIB_FLAGS += $(patsubst %,-l%, $(LIBS))
INCLUDE_FLAGS := $(patsubst %,-I%, $(INCLUDE_DIRS))
SRC_FILES := $(shell find $(SRC_DIRS) -name *.c)
all:
$(CC) -c $(SRC_FILES) $(INCLUDE_FLAGS) $(LIB_FLAGS) $(CFLAGS) -o $(OBJ)
clean:
rm $(OBJ)