著者:後藤大地
C言語は、その誕生以来長きにわたって使われ続けているプログラミング言語だ。Javaが登場してからは第1人気をJavaに譲っているものの、それでも登場から今日までの長きに渡って使われ、さらにこれほど人気を保ち続けているプログラミング言語は他にない。
記事本文掲載のシェルスクリプトマガジンvol.45は以下リンク先でご購入できます。
1 2 3 4 5 6 7 8 9 10 11 |
%?tree . |--?Makefile |--?ore.c |--?ore.h |--?usage.c `--?version.c 0?directories,?5?files %? |
1 2 3 4 5 6 7 8 9 10 11 |
#include <stdlib.h> #include <stdio.h> #include <sysexits.h> int usage() { fprintf(stderr, "usage: something\n"); exit (EX_USAGE); } |
1 2 3 4 5 6 7 8 9 10 |
#include <stdlib.h> #include <stdio.h> #include <sysexits.h> int version() { fprintf(stderr, "version: 0.0\n"); exit (EX_USAGE); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <stdlib.h> #include <sysexits.h> #include "ore.h" int main(int argc, char *argv[]) { if (1 == argc) usage(); if (2 == argc) version(); exit(EX_OK); } |
1 2 |
int usage(); int version(); |
1 2 3 4 5 6 7 8 9 10 |
OUT= ore SRCS!= ls *.c OBJS= ${SRCS:S/.c$/.o/} .SUFFIXES: .o .c .c.o: cc -c $< -o $@ objs: ${OBJS} |
1 2 3 4 5 6 7 8 9 10 11 12 |
% ls Makefile ore.c ore.h usage.c version.c % make objs cc -c ore.c -o ore.o cc -c usage.c -o usage.o cc -c version.c -o version.o % ls Makefile ore.c ore.h ore.o usage.c usage.o version.c version.o % |
1 2 3 |
cc -c ore.c -o ore.o cc -c usage.c -o usage.o cc -c version.c -o version.o |
1 2 3 4 5 6 |
OUT= ore SRCS!= ls *.c OBJS= ${SRCS:S/.c$/.o/} combine: cc -o ${OUT} ${OBJS} |
1 2 3 4 5 6 7 8 |
% make combine cc -o ore ore.o usage.o version.o % ls Makefile ore.c ore.o usage.o version.o ore ore.h usage.c version.c % |
1 |
cc -o ore ore.o usage.o version.o |
1 2 3 4 5 6 7 8 9 10 11 12 |
$ ./ore usage: something $ echo $? 64 $ ./ore 1 version: 0.0 $ echo $? 64 $ ./ore 1 2 $ echo $? 0 $ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
OUT= ore SRCS!= ls *.c OBJS= ${SRCS:S/.c$/.o/} .SUFFIXES: .o .c .c.o: cc -c $< -o $@ objs: ${OBJS} combine: objs cc -o ${OUT} ${OBJS} clean: rm -f ${OUT} ${OBJS} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <stdlib.h> #include <stdio.h> #include <sysexits.h> static char *buf = "usage: something"; #define MESSAGE(X) fprintf(stderr, "%s\n", X) int usage() { MESSAGE(buf); exit (EX_USAGE); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <stdlib.h> #include <stdio.h> #include <sysexits.h> static char *buf = "version: 0.0"; #define MESSAGE(X) fprintf(stderr, "%s\n", X) int version() { MESSAGE(buf); exit (EX_USAGE); |