mysql条件编译_为工程增加条件编译开关

在最近的项目中,要求把录制程序移植到嵌入式板卡上,原来的vlc模块无法被支持(板卡上无法安装vlc程序以及相应的库),因此要求编译一个去掉vlc模块的版本。折腾半天弄出来了,由于对makefile不熟,很多地方实现的不够理想,仅仅是能用而已。

下面是步骤:

(1)首先编译源代码

在代码中增加编译开关(宏定义):MODULE_WITHOUT_VLC

在源代码中所有涉及到vlc模块的 代码处使用该宏定义重写,确保如果定义了MODULE_WITHOUT_VLC,代码也能正常运行(只是不支持vlc模块而已)

注意:宏MODULE_WITHOUT_VLC并不需要在源代码中定义,下面会做说明

(2)编辑Makefile

由于去掉了vlc模块,所有使用到vlc模块的源文件都不需要编译, 我们将所有待编译的目标文件存放到变量$(ALL_OBJFILE)中,这样的话我们需要从中剔除不需要编译的目标文件:

OBJ_COMP_NOVLC = $(filter-out $(OBJ_VLC), $(ALL_OBJFILE))

这样, $(OBJ_COMP_NOVLC)中存放的就是去除vlc模块的所有需要编译的目标文件

同时,在连接时去我们也需要去除vlc模块。

由于在代码中需要条件编译开关,我把它放在Makefile中作为g++的参数传进来:

$(CXX) --verbose -DMODULE_WITHOUT_VLC -c -o $@ $< $(INCPATHS) -g -Wall -rdynamic

最后我们的Makefile如下:

1 ##################################################################################

2 #

3 #编译Record工程

4 #

5 ##################################################################################

6 #编译选项

7 CXX = g++

8 OPTI = -o3

9 CXXFLAGS = -Wall -Wno-strict-aliasing -Wno-unused-variable

10

11 LIBPATH = /usr/local/lib

12 LIBS = -lpthread -lhcnetsdk -llog4cpp

13 EXE = Record

14 EXE_novlc = Record.novlc

15 DIST_PATH = http://www.cnblogs.com/Record/

16

17 #mysql模块

18 LIB_MYSQL = -rdynamic -L/usr/lib/mysql -lmysqlclient_r -lz -lcrypt -lnsl -lm -lpthread

19 LIBS += $(LIB_MYSQL)

20

21 #日志模块

22

23 #包含头文件路径

24 SUBDIR = $(shell ls http://www.cnblogs.com/src -R | grep /)

25 SUBDIRS = $(subst :,/,$(SUBDIR))

26 INCPATHS = $(subst http://www.cnblogs.com/,-Ihttp://www.cnblogs.com/,$(SUBDIRS))

27 INCPATHS += -I http://www.cnblogs.com/include/

28

29 VPATH = $(subst : ,:,$(SUBDIR))./

30 SOURCE = $(foreach dir,$(SUBDIRS),$(wildcard $(dir)*.cpp))

31

32 #使用vlc模块的目标文件

33 OBJ_VLC = CInputVideoVLC.o COutputVideoVLC.o

34 LIB_VLC = -lvlc

35

36 #根据cpp文件名生成对应的目标文件名.o

37 OBJS = $(patsubst %.cpp,%.o,$(SOURCE))

38 #所有待编译的目标文件

39 ALL_OBJFILE = $(foreach dir,$(OBJS),$(notdir $(dir)))

40 OBJSPATH = $(addprefix obj/,$(OBJFILE))

41 ALL_LIBS = $(LIBS)

42 ALL_LIBS += $(LIB_VLC)

43

44 #without vlc support

45 #最终编译时使用的目标文件

46 OBJ_COMP_NOVLC = $(filter-out $(OBJ_VLC), $(ALL_OBJFILE))

47 LIBS_COMP_NOVLC = $(LIBS)

48

49 $(EXE):$(ALL_OBJFILE)

50 $(CXX) -L$(LIBPATH) -Wl,-rpath=/usr/local/lib/ -o $(EXE) $(ALL_OBJFILE) $(INCPATHS) $(ALL_LIBS)

51 mv $(EXE) $(DIST_PATH)

52

53 $(ALL_OBJFILE):%.o:%.cpp

54 $(CXX) --verb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值