2016-10-04 68 views
1
gcc code.c -I/opt/local/include -L/opt/local/lib -lnetcdf -lm -fpic -o code 

如何將其轉換爲生成文件?這就是我現在所擁有的:轉換爲生成文件

IDIR =/opt/local/include 
CC=gcc 
CFLAGS=-I$(IDIR) 

ODIR=obj 
LDIR =/opt/local/lib 

LIBS=-lm 

code: $(OBJ) 
    gcc -o [email protected] $^ $(CFLAGS) $(LIBS) 

.PHONY: clean 

clean: 
    rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~ 
+1

您沒有在您的Makefile中定義'OBJ'。 –

+0

請看我的回答,看起來可能更復雜一些,但一旦你理解了它,它會在很小的修改中爲你提供很多項目。 – Sawel

回答

1

請注意,下面的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 

然後,它只是一個添加變量來生成文件的問題。例如

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 
1

我使用比較通用的Makefile:

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) 

注意:

  1. 把你所有的編譯標誌在CFLAGS。
  2. 把你想鏈接在LIBS中的所有庫(不要添加-l前綴)。
  3. 將所有lib目錄放在LIB_DIRS中(不要添加-L前綴)。
  4. 將所有源代碼放在SRC_DIRS中。
  5. 將所有include目錄放在INCLUDE_DIRS中(不要添加-I前綴)。
相關問題