在我的c / c ++文件中,有多个#define。举个例子:
#ifdef LIBVNCSERVER_HAVE_LIBZ
/* some code */
#ifdef LIBVNCSERVER_HAVE_LIBJPEG
/* some more code */
您能否告诉我如何修改Makefile.in以便在编译期间在所有文件中包含#define?
谢谢。
答案 0 :(得分:16)
-DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG
您可以传递CPPFLAGS
,
CPPFLAGS = -DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG
或制作新变量
CUSTOMDEFINES = -DLIBVNCSERVER_HAVE_LIBZ -DLIBVNCSERVER_HAVE_LIBJPEG
并将其传递给CPPFLAGS = -DEXISTINGFLAGS $(CUSTOMDEFINES)
最终将传递给gcc/g++ -D...
$(CC) $(CPPFLAGS)
答案 1 :(得分:3)
将以下行添加到您的makefile:
DEFINES=LIBVNCSERVER_HAVE_LIBZ LIBVNCSERVER_HAVE_LIBJPEG ... ... further on in your makefile on the line where it says .... ... $(cc) ($(addprefix -D, $(DEFINES))) ..... ... ...
这是作为一个例子,你只为DEFINES
变量添加另一个定义,该变量在行显示$(cc) -D$(DEFINES)
时被引用,其中make将自动扩展变量并编译那些变量是#ifdef
d。
感谢 R Samuel Klatchko 指出一个小小的错误...这是专门针对GNU的make,你可以使用addprefix正确地做到这一点( $(addprefix -D,$(DEFINES)))。
答案 2 :(得分:0)
不要修改Makefile.in。 (并考虑使用Automake并将Makefile.in转换为更简单的Makefile.am)。这些#defines的重点是让configure脚本在config.h中定义它们,你的源文件应该#include< config.h>。如果要维护包,则需要在configure.ac中编写测试,以确定所使用的系统是否安装了libvncserver并支持jpeg和zlib。如果修改Makefile.in以始终定义它们,那么您假设您的代码仅在可用这些功能的机器上构建。如果您做出这样的假设,您仍应该对configure.ac添加检查以确认它,如果不满足依赖关系,则让配置脚本失败。