英文原文在这里:
http://digitalmars.com/d/dcompiler.html
在这里有一篇翻译文章:
http://sofire.iteye.com/blog/111667
不过,主要是关于windows的;我更关心Linux下的使用。
顺便看看两者有啥区别。
相关文件
注意:
Linux的dmd配置文件是dmd.conf
Windows的配置文件是sc.ini
DMD的安装
以上安装过程比较简单,只有PATH环境变量设置正确了,就应该没有什么问题
编译参数和开关
命令的格式:
编译开关之一
-debug / -version
debug、version的使用方法很相似
-unittest
-cov
看看覆盖率分析选项:
-release
用法很简单,不举例了
编译开关之二
编译开关之三
编译开关之四
-c
bud等程序build工具,可以自动判断文件是否有main函数,并生成相应的文件;
但dmd编译器不是这样的;所以,熟悉了dmd编译器后,可以只使用bud等工具来编译程序
-I / -J
自己体会它们的用途吧:)
注意:如果在搜索路径下有同名文件的话,可能出现奇怪的问题;避免出现这种情况,或者改变参数的顺序
-Llinkerflag
一般是-L-L 和 -L-l参数,指定lib路径和库文件
比如:-L-L/usr/local/lib -L-lsqlite3
对linker不熟悉,回头在详细写这块
-o-
如果只想生成文档,连.o文件都不想要;则-o- 就是你想要的了
-offilename
默认情况下,是根据源文件名来确定后续文件的文件名;
比如foo.d 会生成 foo.o 与 foo 文件;
通过-of参数可以改变输出文件的名字:
dmd -ofbar.exe foo.d
它不会自动添加后缀:
dmd -c -ofbar foo.d
生成文件是 bar,而不是bar.o,这可能不是你想要的
-odobjdir -op
.o文件默认生成在当前目录下;
-od 是指定生成目录,-od.和默认相同
-op 是把.o生成到源文件所在目录
具体生成到什么目录下,就看自己的爱好了;
喜欢干净,就用-od吧;对了,-run参数能生成更干净的代码;)
编译开关之五
这几个参数,要么很简单,要么不懂含义;也懒得去研究具体的意思了。
其中的-g参数涉及到使用调试器;我喜欢用writefln调试;唉,回头再研究吧。
编译开关之六
编译开关之七
文章开始就有怎么使用的例子
需要注意的是参数的顺序,因为很多写法都是错误的,正确的是:
链接Linking
在dmd编译成功后,它会再调用连接程序;用-c参数可以不进行连接
连接的实际处理程序其实是gcc;这样能保证和gcc编译的模块兼容
环境变量
CC
默认是用gcc进行连接,可以通过设置CC环境变量,使用其他连接器
DFLAGS
The value of DFLAGS is treated as if it were appended to the command line to dmd.
没有弄明白它是怎么回事;(
dmd.conf初始化文件
dmd会按照下面的目录顺序查找
dmd.conf的内容看起来像这样:
格式是 NAME=value;NAME即使是小写,也会被处理成大写;
里面的DFLAGS的值会覆盖环境变量指定的值
和Windows版本的区别
总结:
和gcc比起来,参数少多了 ;)
虽然可以用bud进行编译,但理解dmd还是必要的。
反正也不复杂,花点时间学习一下还算值得。