通过简单造学命令行.

windows版和linux版的makefile(见下).
两者的不同在于o–>obj.so==>lib. 然后要链接的静态库地址变了.
不然盲目的造不了.必须先将o->obj.ldc2在windows下不能直接连o文件.
nmake和dmake最后都失败了.
nmake说什么符不对,符不对.改了半天都是符不对.然后还不能识别$^.dmake也是,不认识$^
最后,我自己写了个简单的,不就是命令吗?自己造就造好了.
心得:别人的都是折腾,自己的才是暖心的

ldc的命令像这样:ldc2 -c -O2 $^ -of $@.$^为源.$@为目标文件.
或者这样:ldc2 $^ -of $@ 直接加上的库地址.
这样:ldc2 -d-version=algorithm -O2 $^ -of $@,加上版本.
ldc2 -d-version=loop -O2 $^ -of $@.

rust的编译这样:
rustc --cfg algorithm -C opt-level=2 --crate-type=lib --emit=obj rs.rs -o $@
或这样rustc --cfg _loop -C opt-level=2 --crate-type=lib --emit=obj rs.rs -o $@.
看见没有.rust的编译,双杠--后面不是空格就是等号,要配置的.
clang的编译这样:
clang++ -DALGORITHM=1 -c -O2 -o $@ $^
这样clang++ -DLOOP=1 -c -O2 -o $@ $^
这样clang -c -O2 -o $@ $^.
最后得到的居然是都是614kb大小的可执行文件.真神奇!哦,主要是其他各种语言只一个函数不同.

还用了xmake.但未编译过.因为不知道如何用.只会敲命令.有空得去看看.如何自定义xmake.
原来一直怕makefile,现在折腾了一下,再也不怕了.至于其宏定义,太麻烦.不折腾.

linux下:

all: c d-loop d-algorithm cpp-loop cpp-algorithm rs-loop rs-algorithm

c: c.o bench.o
	ldc2 $^ -of $@

c.o: c.c
	clang -c -O2 -o $@ $^

cpp-loop: cpp-loop.o bench.o
	ldc2 $^ -of $@

cpp-loop.o: cpp.cpp
	clang++ -DLOOP=1 -c -O2 -o $@ $^

cpp-algorithm: cpp-algorithm.o bench.o
	ldc2 $^ -of $@

cpp-algorithm.o: cpp.cpp
	clang++ -DALGORITHM=1 -c -O2 -o $@ $^

d-loop: d.d bench.o
	ldc2 -d-version=loop -O2 $^ -of $@

d-algorithm: d.d bench.o
	ldc2 -d-version=algorithm -O2 $^ -of $@

rs-loop: rs-loop.o bench.o
	ldc2 $^ -of $@ ~/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/libstd-44988553032616b2.so

rs-loop.o: rs.rs Makefile
	rustc --cfg _loop -C opt-level=2 --crate-type=lib --emit=obj rs.rs -o $@

rs-algorithm: rs-algorithm.o bench.o
	ldc2 $^ -of $@ ~/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/libstd-44988553032616b2.so

rs-algorithm.o: rs.rs Makefile
	rustc --cfg algorithm -C opt-level=2 --crate-type=lib --emit=obj rs.rs -o $@

bench.o: bench.d
	ldc2 -c -O2 $^ -of $@

这是windows版:

all: c d-loop d-algorithm cpp-loop cpp-algorithm rs-loop rs-algorithm

c: c.obj bench.obj
	ldc2 $^ -of $@

c.obj: c.c
	clang -c -O2 -o $@ $^

cpp-loop: cpp-loop.obj bench.obj
	ldc2 $^ -of $@

cpp-loop.obj: cpp.cpp
	clang++ -DLOOP=1 -c -O2 -o $@ $^

cpp-algorithm: cpp-algorithm.obj bench.obj
	ldc2 $^ -of $@

cpp-algorithm.obj: cpp.cpp
	clang++ -DALGORITHM=1 -c -O2 -o $@ $^

d-loop: d.d bench.obj
	ldc2 -d-version=loop -O2 $^ -of $@

d-algorithm: d.d bench.obj
	ldc2 -d-version=algorithm -O2 $^ -of $@

rs-loop: rs-loop.obj bench.obj
	ldc2 $^ -of $@ C:\Users\Administrator\.rustup\toolchains\stable-i686-pc-windows-msvc\lib\rustlib\i686-pc-windows-msvc\lib\std-13b8a18bc6c8a939.dll.lib

rs-loop.obj: rs.rs Makefile
	rustc --cfg _loop -C opt-level=2 --crate-type=lib --emit=obj rs.rs -o $@

rs-algorithm: rs-algorithm.obj bench.obj
	ldc2 $^ -of $@ C:\Users\Administrator\.rustup\toolchains\stable-i686-pc-windows-msvc\lib\rustlib\i686-pc-windows-msvc\lib\std-13b8a18bc6c8a939.dll.lib

rs-algorithm.obj: rs.rs Makefile
	rustc --cfg algorithm -C opt-level=2 --crate-type=lib --emit=obj rs.rs -o $@

bench.obj: bench.d
	ldc2 -c -O2 $^ -of $@
两个文件放在后边.前面太占地方.
posted @   zjh6  阅读(18)  评论(0编辑  收藏  举报  
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示