Makefile(用户态) && gcc

1. gcc -m32 -S 源文件  可编译出C程序的汇编版本


2. Makefile example

ifeq ($(V), WIN)
  CC = /xxx/xxx/mingw32/bin/i386-mingw32-gcc 
  DLLTOOL=/xxx/xxx/mingw32/bin/i386-mingw32-dlltool
  LIBS = -lwsock32
  TARGET_EXE = http_get.exe
  TARGET_LIB = http_get.dll
  TARGET_DEF = http_get.def
else
  CC = gcc 
  LIBS =
  TARGET_EXE = http_get
  TARGET_LIB = http_get.so
endif

CFLAGS = -g -Wall -Wextra
OBJS_LIB = tcp.o http_get.o
OBJS_EXE = main.o
#OBJS = tcp.o http_get.o main.o

ALL: $(TARGET_LIB) $(TARGET_EXE) $(TARGET_DEF)

$(TARGET_LIB): $(OBJS_LIB)
  $(CC) $(CFLAGS) -shared -o $@ $^ $(LIBS) 

$(TARGET_EXE): $(OBJS_EXE) $(TARGET_LIB)
  $(CC) $(CFLAGS) -o $@ $^ 

$(TARGET_DEF): http_get.o
  $(DLLTOOL) -z $@_tmp --export-all-symbols $^ 
  sed 's/ @ [0-9]*//g' $@_tmp > $@
  rm -f $@_tmp 

clean:
  rm -f *.o
  rm -f $(TARGET_EXE) $(TARGET_LIB) $(TARGET_DEF)

3. 变量

$*
  不包含扩展名的目标文件名称。
  $+
  所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。
  $<
  第一个依赖文件的名称。
  $?
  所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。
  $@
  目标的完整名称。
  $^
  所有的依赖文件,以空格分开,不包含重复的依赖文件。
  $%

你可能感兴趣的:(Makefile(用户态) && gcc)