【发布时间】:2010-12-30 15:22:36
【问题描述】:
我正在努力改进Bitfighter 的漫长的 Linux 构建过程,但我遇到了 make 问题。我的过程实际上很简单,而且由于 make 是(几乎)通用的,如果可以的话,我想坚持下去。
下面我附上了我当前的 Makefile,它可以工作,但很笨拙。我正在寻找改进方法,目前有三个具体问题。
首先,可以使用多种选项来构建项目。让我们以调试和专用于这个例子。专用选项将排除所有 UI 代码,并为托管(但不玩)游戏创建更有效的二进制文件。 debug 选项将一个标志添加到激活调试代码的编译器。有人可能希望使用这些选项中的一个、两个或一个都不来构建游戏。
所以问题是,我该如何进行这项工作?从下面 makefile 中的 cmets 可以看出,通过设置 DFLAGS=-DTNL_DEBUG 启用调试。我想要用户类型
make dedicated debug
而不是
make dedicated DFLAGS=-DTNL_DEBUG
如何重写我的 makefile 以使其正常工作?
其次,当我在不同版本的 Linux 上安装 lualibs 包时,会得到不同的库。例如,在 Ubuntu 上,当我使用 apt-get 安装 lualib 软件包时,我会在 /usr/lib 文件夹中获得 lua5.1.a。在 Centos 上,当我使用 yum 安装相同的东西时,我的 /usr/lib 文件夹中会出现 liblua.a。我如何才能弄清楚我拥有哪个库并将其链接?显然 -l 指令对此不够聪明。我希望用户不必担心 Lua 安装后会在哪里结束,并且 makefile 可以正常工作。
最后,有没有什么方法可以让 make 检测某些必需的软件包(例如 freeglut)是否尚未安装,并自动安装它们或至少提醒用户注意这一事实他们需要安装它们(而不是简单地以神秘的错误消息终止)?
谢谢!!
这是我的 Makefile。
# Bitfighter 生成文件 ####################################### # # 配置 # # # 一些安装的 lua 用不同的名字调用 lua 库,而你 # 可能需要覆盖默认的 lua 库路径。对于 ServerHitch # CENTOS 安装,例如,你需要指定 lua 库 # 在 make 命令行上: # LUALIB=/usr/lib/liblua.a # # # 要在启用调试的情况下编译 Bitfighter,请指定 # DFLAGS=-DTNL_DEBUG # 在 make 命令行上 # # # 在 Windows 上使用 make 构建仍然是高度实验性的。你会 # 可能需要添加 # WFLAGS="-DWIN32 -D_STDCALL_SUPPORTED" THREADLIB= 过剩=-lglut32 INPUT=winJoystick.o # 到 make 命令行有任何希望让它工作! :-) # # ####################################### CC=g++ -g -I../tnl -I../glut -I../openal -DTNL_ENABLE_LOGGING 线程库= -lpthread 过剩=-lGL -lGLU -lglut 输入=linuxInput.o 对象_ZAP=\ CTFGame.o\ ...还有很多... BotNavMeshZone.o\ ../master/masterInterface.o\ 标志= DFLAGS= EXEFILE=bitfighter 开放=../openal/linux/libopenal.a LUALIB=-llua5.1 WFLAGS= .co: $(CC) $(DFLAGS) $(WFLAGS) -c $(CFLAGS) $【问题讨论】:
标签: c++ linux build-process makefile