免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1600 | 回复: 2
打印 上一主题 下一主题

为什么我的makefile编译参数只参于连接阶段,而不是编译阶段 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-05 17:20 |只看该作者 |倒序浏览

  1. ifndef CFG
  2.     CFG = Debug
  3. endif

  4. ifeq ($(CFG), Debug)
  5.     CFLAGS = -g
  6. else
  7.     CFLAGS = -O3 -Wall -Wno-return-type -DNDEBUG  
  8. endif

  9. LN_OP := $(find /usr/include/ -maxdepth 1 -iname boost)

  10. ifeq ($(LN_OP), $(wildcard $(LN_OP)))
  11.     LINK_OP :=$(LN_OP)
  12. endif

  13. CC  = g++
  14. CXX = g++
  15. AR  = ar

  16. INCLUDE_PATH  =
  17. LIB_PATH       =
  18. CFLAGS           +=
  19. LDFLAGS       =
  20. TARGETBIN       = ting


  21. INCLUDE = -I. $(patsubst %, -I%, $(INCLUDE_PATH))
  22. LIB         = -L. $(patsubst %, -L%, $(LIB_PATH))
  23. CFLAGS     += $(INCLUDE) $(LIB)


  24. SRCS_C      := $(shell find . -name '*.c')        
  25. SRCS_C      := $(patsubst ./%,%,$(SRCS_C))        

  26. SRCS_CPP :=$(shell find . -name '*.cpp')  
  27. SRCS_CPP :=$(patsubst ./%,%,$(SRCS_CPP))

  28. SRCS_CXX :=$(shell find . -name '*.cxx')
  29. SRCS_CXX :=$(patsubst ./%,%,$(SRCS_CXX))

  30. LOG_FILE :=$(shell find . -name '*.log')
  31. LOG_FILE :=$(patsubst ./%,%,$(LOG_FILE))

  32. BAK_FILE :=$(shell find . -name '*.bak')
  33. BAK_FILE :=$(patsubst ./%,%,$(BAK_FILE))

  34. OBJS := $(patsubst %.o,%.o,$(SRCS_C:.c=.o) $(SRCS_CPP:.cpp=.o) $(SRCS_CXX:.cxx=.o))

  35. .PHONY: all clean clobber distclean depends install

  36. all: $(TARGETBIN)

  37. $(TARGETBIN):  $(OBJS)
  38.     $(CXX) $(CFLAGS) $(filter %.o,$^) -o $@ $(LDFLAGS)

  39. clean:
  40.     -$(RM) $(OBJS) $(TARGETBIN)

  41. clog:
  42.     -$(RM) -f $(LOG_FILE) $(BAK_FILE)
复制代码
编译时 使用的是:
$ make CFG=R   

g++ -c -o main.o main.cpp
g++ -c -o ping.o ping.cpp
g++ -O3 -Wall -Wno-return-type -DNDEBUG -I. -L. main.o ping.o -o ting  

大家可以随便写一个main.cpp看看呀,好奇怪呀

论坛徽章:
0
2 [报告]
发表于 2012-04-05 17:40 |只看该作者
已解决,贴上分享

ifndef CFG
        CFG = Debug
endif

ifeq ($(CFG), Debug)
        CFLAGS = -g
else
        CFLAGS = -O2 -Wall -Wno-return-type -DNDEBUG  
endif

LN_OP := $(find /usr/include/ -maxdepth 1 -iname boost)

ifeq ($(LN_OP), $(wildcard $(LN_OP)))
        LINK_OP :=$(LN_OP)
endif

CC  = gcc
CXX = g++
AR  = ar

INCLUDE_PATH  =
LIB_PATH           =
CFLAGS                   +=
LDFLAGS              = -lpthread
TARGETBIN           = ting


INCLUDE = -I. $(patsubst %, -I%, $(INCLUDE_PATH))
LIB                 = -L. $(patsubst %, -L%, $(LIB_PATH))
CFLAGS         += $(INCLUDE) $(LIB)


SRCS_C          := $(shell find . -name '*.c')               
SRCS_C          := $(patsubst ./%,%,$(SRCS_C))               

SRCS_CPP :=$(shell find . -name '*.cpp')  
SRCS_CPP :=$(patsubst ./%,%,$(SRCS_CPP))

SRCS_CXX :=$(shell find . -name '*.cxx')
SRCS_CXX :=$(patsubst ./%,%,$(SRCS_CXX))

LOG_FILE :=$(shell find . -name '*.log')
LOG_FILE :=$(patsubst ./%,%,$(LOG_FILE))

BAK_FILE :=$(shell find . -name '*.bak')
BAK_FILE :=$(patsubst ./%,%,$(BAK_FILE))

OBJS := $(patsubst %.o,%.o,$(SRCS_C:.c=.o) $(SRCS_CPP:.cpp=.o) $(SRCS_CXX:.cxx=.o))

.PHONY: all clean clobber distclean depends install

all: $(TARGETBIN)

%.o: %.cpp
        $(CXX) $(CFLAGS) -c -o $@ $<

%.o: %.c
        $(CC) $(CFLAGS)  -c -o $@ $<

$(TARGETBIN):  $(OBJS)
        $(CXX) $(CFLAGS) $(filter %.o,$^) -o $@ $(LDFLAGS)

clean:
        -$(RM) $(OBJS) $(TARGETBIN)

clog:
        -$(RM) -f $(LOG_FILE) $(BAK_FILE)

论坛徽章:
0
3 [报告]
发表于 2012-04-05 21:39 |只看该作者
回复 1# freeskyo

输入
make -r
命令,会提示没有规则可以创建main.o ting.o ?

make隐式规则没有使用$(CFLAGS)


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP