通过简单造学命令行.

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/fqbqrr/article/details/100573631

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 $@
两个文件放在后边.前面太占地方.

猜你喜欢

转载自blog.csdn.net/fqbqrr/article/details/100573631
今日推荐