原文ImportC
是C11
编译器.关注的是标准兼容性
,而不是实现大量不同的扩展
.
火卫一(D
标准库)包含一份zlib
语言,ImportC
消除了在DMD
构建过程中需要外部C编译器
,即所有DMD
都可以由DMD
构建.实际上,这是ImportC
开发背后的动机之一.
用DMD构建oksh
oksh
不含D代码
.用OpenBSD
下类似clang
的CC
来配置oksh
.
DMD
使用与C编译器
不同的标志
.首先要注意,DMD
没有-o
标志,如果要设置输出文件名
,要使用-of(注意,没有空格)
.D本身不使用预处理器,因此在使用ImportC
时,与C预处理器
标志不同.该标志是-P=
.如,oksh
使用-DEMACS
和-DVI
接口标志,对DMD
,这些标志需要转换为-P=-DEMACS
和-P=-DVI
.
结合CFLAGS
产生:
OpenBSD
使用gnu
扩展汇编.
DMD
虽然理解内联汇编
,但它不理解GNU
扩展汇编.
用#ifdef
简单去掉.运行make
,
用clang
编译.expr.c
也不能编译,其他都编译过了.
修改-lcurses
链接为-L=-lcurses
.
会遇到很多链接
错误.再加上-P=-D_ANSI_LIBRARY
预处理指令,就可以编译通过了.
加上-betterC
标志,再加上-inline/-release
,加上-L=--as-needed
标志,告诉lld
不链接未用库.