僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
あれこれチラ見して試す。
どうするのか、一応エラーが出ないことだけをまず確認。
$ cat hoge.c #include<stdio.h> int main2(); int main() { printf("foo\n"); main2(); return 0; } $ cat fuga.c #include<stdio.h> int main2() { printf("bar\n"); return 0; }
$ gcc -Wall hoge.c fuga.c -o hogefuga $ ./hogefuga foo bar
を実現する
pythonスクリプトを書いた。
いや汚い。
$ python div.py 34 $ ls *.c func_0.c func_1.c func_2.c main.c
printfでfizzbuzzを15の倍数まで出力する関数func0(), func1(),...
を定義し、それを一つずつ
ソースファイルfunc_0.c, func_1.c ... に書き出す。
これは末尾。
$ cat func_2.c #include<stdio.h> int func2() { printf("31\n32\nfizz\n34\n"); return 0; }
で、全関数のプロトタイプ宣言を書いて、 main関数内で全部実行する main.c も。
$ cat main.c #include<stdio.h> int func0(); int func1(); int func2(); int main() { func0(); func1(); func2(); return 0; }
最終的なオブジェクトファイルは、やはり
かなり大きくなってしまう。
$ time python div.py 2000000 real 0m8.227s user 0m4.388s sys 0m3.276s $ time for x in func*.c main.c ; do gcc -Wall -c $x ; done real 66m37.258s user 38m31.260s sys 16m26.678s $ time gcc -Wall *.o -o 2000000 real 13m52.712s user 0m25.854s sys 0m49.535s $ ls -lh 2000000 -rwxr-xr-x 1 user group 32M 8月 20 16:34 2000000
200万行は、一応ビルド、実行できた(SWAPかなり)。
ちなみに
こないだの200万行は14MBだった。
あと、stripさせると、こないだの方はあまり変らなかったが
こっちは32MBが23MBになった。
Makefileは、考える気になったら考えよう。
お馬鹿なfizzbuzzを吐くCソースを出力する
Pythonスクリプトで
Makefileも出力させるようにする。
オブジェクトのファイル名はfizzbuzzの末尾
(ただし"fizz"とかではない)。
stripするとかなり小さくなったので、
後でこれも加えた。
$ python div_make.py 83 $ ls Makefile func_0.c func_2.c func_4.c main.c div_make.py func_1.c func_3.c func_5.c
$ cat Makefile all: gcc -Wall -c func_0.c gcc -Wall -c func_1.c gcc -Wall -c func_2.c gcc -Wall -c func_3.c gcc -Wall -c func_4.c gcc -Wall -c func_5.c gcc -Wall -c main.c link: gcc -Wall *.o -o 83 strip 83 clean: rm -rf Makefile func_*.c *.o main.c 83
さて、make(1)は巨大なMakefileを解釈できるのだろうか。
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。