-
Notifications
You must be signed in to change notification settings - Fork 150
MakeVars
软件安装和部分编译测试说明还可参考代码中的 INSTALL-win.txt 或 INSTALL-unix.txt 。
-
PROJNAME: 工程名,一般与实现文件所在文件夹同名。
-
PKGNAME: 包名,用于形成头文件包含路径和形成C#命名空间。工程源码目录一般为
source\$(PKGNAME)\$(PROJNAME)\
,对外接口文件可放在interface\$(PKGNAME)\$(PROJNAME)\
或interface\$(PKGNAME)\
。 -
APPTYPE: 当前工程是程序(不是动态库)时设置,可能的值有
console
(控制台程序)、mfc
(MFC窗口程序)、qt
(QT窗口程序)。 -
INCLUDES: 用于编译C++文件的包含路径参数,每个路径以-I开头, 格式形如
-Ipath1 -Ipath2 -I"path with space"
,该参数将和$(CPPFLAGS)
一起用于编译。PKGNAME 会自动加到 INCLUDES 中,如果工程还需要额外的包含路径,可以扩充到 INCLUDES ,例如INCLUDES += -I$(INTERFACE_DIR)/otherpkg
。 -
LIBS: 用于链接的库文件路径和库文件的参数。每个库路径的格式为
$(LIBPATHFLAG)yourlibpath
;每个库文件的格式为$(LIBFLAG)$(LIBPRE)yourlibname$(LIBEND)
;如果是外部VC++库文件,则没有LIBPRE,格式为$(LIBFLAG)yourlibname$(LIBEND)
或直接写为yourlibname.lib
。 -
MOCS: QT模块中含有 Q_OBJECT和信号槽的头文件列表,在包含 Makefile.qt4 前定义,例如
MOCS = mainwnd.h mypanel.h
。 -
CPPFLAGS: 编译选项,和 INCLUDES 变量一起使用。
-
LDFLAGS: 链接选项,和 LIBS 变量一起使用。
如果需要使用VC++编译器进行编译,需要定义VCBIN环境变量、在Windows上安装Unix环境模拟软件 MSYS,还需要使用 GCC 进行文件依赖分析(生成.d文件,不需要GCC编译)。
如果在Win32平台编译时 cl.exe 报告找不到 mspdb80.dll 或 mspdb60.dll,则可以使用三种方法之一:1)将 cl.exe 所在的 bin 目录复制到另一个目录,将所缺的 mspdb80.dll 复制到这个新目录,然后将 VCBIN 设置为该目录;2)将这一个DLL复制到 cl.exe 所在目录(但会引起在VS IDE中编译错误,又得临时删掉);3)或者将将该DLL所在目录添加到 PATH 环境变量。在x64平台编译时没有该问题。
-
VCBIN
VC++的cl.exe所在目录,末尾有反斜号,如果不设置该变量则使用GCC编译并忽略下面三个环境变量。 下面是示例值(需要根据实际安装路径来定,末尾有分隔符): `D:\VS2008\VC\bin2\` (VC90,我是复制VC\bin目录再放mspdb80.dll的) `C:\Program Files\Microsoft Visual Studio\VC98\Bin\` (VC6)
-
VCINC
VC++的包含路径,格式参见INCLUDES,不要包含VC++特殊编译选项(避免GCC依赖分析失败,VCINC会用于GCC),该变量将合并到 INCLUDES 变量中。 下面是示例值(需要根据实际安装路径来定): `-I"D:\VS2008\VC\include" -I"D:\VS2008\VC\atlmfc\include"` (VC90) `-I"C:\Program Files\Microsoft Visual Studio\VC98\Include"` (VC6)
-
WINSDKINC
Microsoft Windows SDK 的包含路径(用 VC2005或高版本时),格式参见INCLUDES。WINSDKINC不用于GCC依赖分析,*.rc 资源文件编译时也会用到。下面是示例值(需要根据实际安装路径来定): `-I"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include"`
-
VCFLAGS
包含VC++特殊编译选项,每个选项以减号开头而不是以除号开头。VCFLAGS不用于GCC依赖分析。下面是示例值(需要根据实际安装路径来定): `-EHsc -MD -W3 -GR -DUNICODE`
-
VCLIBS
VC++的库文件路径和链接选项的参数,将合并到 LIBS 变量中。该变量包含VC++特殊链接选项,每个选项以减号开头而不是以除号开头。 下面是示例值(需要根据实际安装路径来定,例如64位编译时改为 `-MACHINE:X64`): `-machine:X86 -libpath:"D:\VS2008\VC\lib" -libpath:"D:\VS2008\VC\atlmfc\lib" -libpath:"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib"` `-MACHINE:X86 -libpath:"C:\Program Files\Microsoft Visual Studio\VC98\Lib"` (VC6)
- CPP: 编译命令名。
- LINK: 链接命令名。
- AR: 打包为静态库文件的命令名。
- ARFLAGS: 打包选项。
-
OUTFLAG: 用于替换 -o
-
LIBPATHFLAG: 用于替换 -L ,每个库路径的格式为
$(LIBPATHFLAG)yourlibpath
-
LIBFLAG: 用于替换 -l
-
LIBPRE: 与LIBFLAG一起使用,对外部VC++库文件则不需要LIBPRE。
-
LIBEND: 与LIBFLAG一起使用,每个库文件的格式为
$(LIBFLAG)$(LIBPRE)yourlibname$(LIBEND)
;如果是外部VC++库文件,则没有LIBPRE,格式为$(LIBFLAG)yourlibname$(LIBEND)
或直接写为yourlibname.lib
。 -
LIBEXT: 静态库后缀名
-
OBJEXT: 目标文件后缀名
-
APPEXT: 程序后缀名
-
QTDIR: QT4 框架在 Windows 上的安装路径,Linux 上不需要设置。例如可能为
D:\Soft\Qt_4.8.1_VS2008
,QT4在Windows上有VS2008和MinGW等发布版本,在Linux上可能已安装了QT4。 -
QT4_INCLUDE: QT4框架的包含路径,Windows 上不需要设置,其他操作系统下与config.mk中的默认值不同时可设置。
-
QT4_LIB: QT4框架的库文件路径,Windows 上不需要设置,其他操作系统下与config.mk中的默认值不同时可设置。
-
WINSDKBIN: 包含 rc.exe 的目录,用于资源文件 *.rc 的编译链接,末尾有反斜号。在 Windows 上Make时需要设置,或者将目录加入到 PATH 环境变量中。下面是示例值:
`C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\`
-
ROOTDIR: 根 Makefile 文件所在的相对目录,该目录下有 config.mk 文件。
-
INTERFACE_DIR: 接口根目录
-
INSTALL_DIR: 最终输出文件的根目录,默认为 build 目录。
-
PLUGINS_DIR: 插件文件的输出目录,默认为 build/plugins 目录。
-
TARGET: 工程最终输出文件(动态库、静态库、程序)的文件名,带有路径,通常输出到
$(INSTALL_DIR)
目录或其子目录下,例如$(PLUGINS_DIR)
。程序的TARGET一般设置为$(INSTALL_DIR)/$(PROJNAME)$(APPEXT)
,插件的TARGET一般设置为$(PLUGINS_DIR)/$(PROJNAME).pln
,静态库的TARGET一般设置为$(PLUGINS_DIR)/$(PROJNAME)$(LIBEXT)
。 -
SUBDIRS: 用于调用各个子文件夹下的 Makefile
-
SOURCES: 用于识别各个CPP文件
-
OBJS: 目标文件列表,从SOURCES推导而来
- OS: 所在操作系统类型
- IS_WIN: 所在操作系统为 Windows 或未定义
- IS_MACOSX: 所在操作系统为 Mac OS X 或未定义
- IS_CONSOLE: 当前程序为控制台程序或未定义,在包含config.mk前加上
APPTYPE =console
来标识控制台程序 - IS_LIB: 当前工程为静态库或未定义,在包含config.mk前加上
CPPFLAGS += -D_LIB
来标识静态库 - IS_AFXDLL: 当前工程为MFC程序或MFC常规动态库时在包含config.mk前加上
CPPFLAGS += -D_AFXDLL
来标识,其他工程类型时此值未定义 - IS_AFXEXT: 当前工程为MFC扩展动态库时在包含config.mk前加上
CPPFLAGS += -D_AFXDLL -D_AFXEXT
来标识,其他工程类型时此值未定义
要使用SWIG插件功能的话,必须安装 SWIG,并根据需要安装 Python、Perl、Java、Ruby 等一种或多种开发包。在 Linux 和 Mac OS X 上可能已经安装了这些开发包,且可能不需要再配置环境变量。
-
SWIG_BIN: 包含 swig.exe 的目录,末尾有反斜号。在 Windows 上需要设置,或者将目录加入到 PATH 环境变量中。例如设置为
D:\Soft\swigwin-2.0.4\
。 -
PYTHON_INCLUDE: 包含 python.h 的目录。
-
PYTHON_LIB: 包含 Python 库文件的目录,在 Windows 上需要设置。例如设置为
D:\Soft\Python27x86\libs
。 -
PYTHON_LIBFILE: Python 库文件名,没有后缀名。由于 ActivePython 默认是用VC++编译的,因此如果使用该 Python 发行版时也需要使用VC++编译Python插件,例如使用 ActivePython 2.7 时该变量填写为
python27
。 -
PERL5_INCLUDE: 包含 perl.h 的目录。
-
PERL5_LIB: 包含 Perl 库文件的目录,在 Windows 上需要设置。例如设置为
D:\Soft\Perl\lib\CORE
。 -
PERL5_LIBFILE: Perl 库文件名,没有后缀名。
-
RUBY_INCLUDE: 包含 ruby.h 的目录。
-
RUBY_LIB: 包含 Ruby 库文件的目录,在 Windows 上需要设置。
-
RUBY_LIBFILE: Ruby 库文件名,没有后缀名。
-
JAVA_INCLUDE: 包含 jni.h 的目录。
-
JAVA_BIN: 包含 javac.exe 的目录,末尾有反斜号。在 Windows 上需要设置,或者将目录加入到 PATH 环境变量中。例如设置为
D:\Java\jdk1.6.0_29\bin\
。 -
CSC_BIN: 包含 csc.exe 的目录,用于 C# 编译,末尾有反斜号。在 Windows 上需要设置,或者将目录加入到 PATH 环境变量中。例如设为
C:\Windows\Microsoft.NET\Framework\v3.5\
。
- SWIG_TYPE: 在根 Makefile 文件中自动定义,例如执行
make python perl5
就自动定义并编译。 - SWIG_INCLUDE: 当前扩展语言的包含目录
- SWIG_LIBPATH: 当前扩展语言的库目录
- SWIG_LIBFILE: 当前扩展语言的库文件名,没有后缀名和路径
- SWIG_TESTEXT: 测试文件的后缀名
- TESTFILE: 测试文件,以test开头,然后是工程名,例如 testmyproj.py
- USE_PYTHON: 当前是编译Python扩展库,或未定义
- USE_PERL: 当前是编译Perl扩展库,或未定义
- USE_JAVA: 当前是编译Java扩展库,或未定义
- USE_RUBY: 当前是编译Ruby扩展库,或未定义
- SWIG_OUTDIR: SWIG插件动态库的输出目录,位于 $(INSTALL_DIR) 下
- SWIG_CC: SWIG对.i接口文件的编译命令行
- SWIG_PRE: SWIG插件动态库的前缀名,除Python插件为“_”前缀名外,其余语言的插件前缀名为空
- SWIG_EXT: SWIG插件动态库的后缀名,例如 .pyd、.dll、.so
- WRAPFILE: SWIG生成的CXX文件的文件名
在Windows上用MinGW MSYS进行make时,每次都要进入特定的代码目录,下面介绍一种快捷方式。假设x3py的代码下载到 E:\x3py\ 下,则在MSYS的~目录下(<msys_setuppath>\home\<youruser>\
)创建Makefile文件,其内容如下(@cd前为制表符):
SWIGS =python perl5 java csharp ruby php lua r
CLEANSWIGS =$(addsuffix .clean, $(SWIGS))
.PHONY: clean cleanall py $(SWIGS)
all clean cleanall py $(SWIGS) $(CLEANSWIGS):
@cd e:; cd x3py; $(MAKE) $@
这样每次进入MSYS环境时,直接输入make
、make all py
或make clean
就能立即编译。