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

これをメイクファイルに変換するにはどうすればよいですか?次のメイクファイルはメイクファイルに変換

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 

が、それはメイクファイルに変数を追加するだけの仕事であろうと

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

注:これは私が今持っているものです。例

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

のために私はより一般的なメイクファイルを使用します。

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_DIRSに入れます(-I接頭辞を付けないでください)。
関連する問題