- Cèšèªã®èŠæ Œ
- ã³ã³ãã€ã«
- ãã«ã
- autotools
- unittest(ããŸã)
Wikipediaçã§èª¿æ»ããæã以äžã®ïŒã€ã®èŠæ ŒãCèšèªã«ååšããŠããŸãã
(K&Rã¯èŠæ ŒãšããæŠå¿µã§è¯ãã®ãåãããŸãããã»ã»ã»)
- K&R
æè¬ãã«ãŒããã³ïŒãªãããŒã®ãããã°ã©ãã³ã°èšèªCãã«æžãããŠããèŠæ Œ - C89/90
ANSIã«ãã£ãŠãæåã«å®ããããæšæºèŠæ Œã - C99
C89/90ã«äžéšæ¹å®ãè¡ã£ãèŠæ Œ - C11
ææ°èŠæ Œã ããgcc
ãclang
ã¯äžéšã®ã¿å¯Ÿå¿
æåã®ãã¡ã¯ããããªã«æèããªããŠè¯ãïŒãšæããŸãã
ãããªããšãããSegmentation Fault
ãäœæ
èµ·ããã®ãããã¡ããšç解ããæ¹ãããã§ãã
èŠæ Œãéµã«ãªã£ãŠããã®ã¯ããœãããŠã§ã¢ã®é
åžãèããæã ãšæããŸãã
äŸãã°ã以äžã®ãããªæžãæ¹ã¯C89ã§ã¯ãšã©ãŒã«ãªããŸãã
for(int i=0; i < 10; i++){
printf("%d¥n", i);
}
foræã®äžã§ãintã®å€æ°ã宣èšåºæ¥ãªãã®ã§ãã
ããããååŠè
ããããŸã§æèãã¹ããïŒãšèšããããšçåã§ãã
ãœãããŠã§ã¢ãã³ã³ã¹ã¿ã³ãã«äœãããã«ãªã£ãŠãããããããç解ããŠããã°è¯ããšæããŸãã
-std=c89
çã®ã³ã³ãã€ã«ãªãã·ã§ã³ã§ãèŠæ Œãæå®ããã³ã³ãã€ã«ãè¡ããŸãã
é
åžãèããæã¯ãå€ãèŠæ Œã§ãã³ã³ãã€ã«åºæ¥ãããã«ããªãã·ã§ã³ãæå®ããã³ã³ãã€ã«ããã£ãŠã¿ãŸãããã
ã³ã³ãã€ã«ãšã¯ã»ã»ã»
ããã°ã©ãã³ã°èšèªã§æžãããã³ã³ãã¥ãŒã¿ããã°ã©ã (ãœãŒã¹ã³ãŒã)ã解æããã³ã³ãã¥ãŒã¿ãçŽæ¥å®è¡å¯èœãªåœ¢åŒã®ããã°ã©ã (ãªããžã§ã¯ãã³ãŒã)ã«å€æããããšã
ITçšèªèŸå ž e-Words - ã³ã³ãã€ã«ãšã¯
ç¹°è¿ãã«ãªã人ãå€ããšæããŸããã埩ç¿ãå ŒããŠãšãããããœãŒã¹ã³ãŒããæžããŠã¿ãŸãããã
ãã¡ã€ã«åcomp01.c
#include <stdio.h>
int add (int a, int b){
return (a + b);
}
int main (){
printf("answer is %d\n", add(4, 5));
}
ã³ã³ãã€ã«ã³ãã³ã
gcc -o comp01 comp01.c
äœæãããcom01ã³ãã³ããå®è¡ããŠã¿ãŸãããã
ã³ã³ãã€ã«ãšããäžèšã«å¯ŸããŠã以äžã®ãããªäžé£ã®ããã°ã©ã ãåäœããŠããŸãã
- ããªããã»ããµ
åå¥è§£æããã¯ãã®å±éãå®æ°ã®æ°å€ãžã®çœ®æãçãè¡ãã - ããŒãµãŒ
æ§æ解æãæå³è§£æ - ã³ãŒããžã§ãã¬ãŒã¿
ãªããžã§ã¯ãã³ãŒããçæãã => ã»ãšãã©æ©æ¢°èªã®ç¶æ ã§ããããããå®è¡å¯èœã§ã¯ãããŸããã - ã¢ã»ã³ãã©
ãªããžã§ã¯ãã³ãŒãå ã®ã¢ã»ã³ãã©èšèª(MOV, ADD, DIVç)ãæ©æ¢°èªã«å€æããŸãã - ãªããã£ãã€ã¶
ãœãŒã¹ã³ãŒãå ã®ãåé·ãªè¡šçŸãªã©ãèªåã§æé©ãªã³ãŒãã«å€æããŠããããã®ã§ãã Cèšèªé»ææã«ã¯ãå€æ°ã®Cèšèªã³ã³ãã€ã©ãååšãããã®ã»ãšãã©ãææã§ããã éé¡ã®é«ãã¯ãå®å®æ§ãšãªããã£ãã€ã¶ã®æ§èœã«ãã£ãããã§ãã ä»ã§ã¯gccãclangã䜿ãã®ãåœããåãªã®ã§ãéäžã®æããããŸãã - ãªã³ã«
ãªã³ã«ã¯ããªããžã§ã¯ããã¡ã€ã«å ã®åçãªã³ã¯ãéçãªã³ã¯ãçµåããŠãïŒãã¡ã€ã«å ã§å®çµããå®è¡å¯èœãã¡ã€ã«ãäœæããŸãã ãªããããã»ãïŒãšããæãã§ãããå šç¶é£ãããªãæŠå¿µã§ããåŸã§ãé ãè¿œã£ãŠè§£èª¬ããŸãã
æŒç¿1ã®gccã³ãã³ãã¯ãäžèšã®äžé£ã®ã³ãã³ããè£ã§å®è¡ãããŠããŸãã
gcc -o comp01 comp01.c
ã¢ã»ã³ãã©ãæ±ã£ãŠãããšãããŒã¢ããã¯ãšããåèªãè¯ãåºãŠããŸãã
ã¢ã»ã³ãã©ã§ã¯ãæ©æ¢°èªã ãšäººéã«èŠããããªããããæ©æ¢°èªåœä»€ãç°¡åãªã¢ã«ãã¡ãããã«çœ®æããŠããŸãã
眮æããåœä»€(MOV, ADDãšã)ãããŒã¢ããã¯ãšãããŸãã
æ¥æ¬ã«ãããŠããŒã¢ããã¯ãšèšããšãã¢ã»ã³ãã©èšèªã®ããšãçŽæ¥æãããšãå€ãããã§ããã
æµ·å€ã§ã¯ããã以å€ã«ã人éãèŠãã«ããäºæããé©åãªè±åèªã§çœ®ãæããããšãããŒã¢ããã¯ïŒçºé³ã§ã¯ãã¢ããã¯)ãšåŒã¶ããã§ãã
è±åèŸæžã§ã¯ãäžèšã®ãããªæå³ã§ãã
èšæ¶ãå©ããïŒèšæ¶è¡ã®.
menemonic - Weblio
è€æ°ãã¡ã€ã«ãã³ã³ãã€ã«ããã®ã¯ãããçšåºŠã®èŠæš¡ã®Cèšèªãããžã§ã¯ãã§ããã°åœç¶ã§ãã
ããããã©ã®ããã«gccã³ãã³ããå®è¡ããã°è¯ãã®ã§ããããïŒ
å®éã«ãã£ãŠã¿ãŸãããã
ãã¡ã€ã«æ§æãè€éã«ãªã£ãŠããŸãã®ã§ãcomp02
ãšãããã£ã¬ã¯ããªãäœæããŠäžããã
ãã®äžã«ä»¥äžã®ïŒã€ã®ãã¡ã€ã«ãäœæããŠäžããã
- main.c
#include <stdio.h>
#include "common.h"
int main (){
printf("answer is %d\n", add(4 , 5));
}
- func.c
int add (int a, int b){
return (a + b);
}
- common.h
int add (int a, int b);
æŒç¿2ã®ããã°ã©ã ã¯ãæŒç¿1ã®ããã°ã©ã ãšãã£ãŠããããšã¯åãã§ãã
ç°ãªãã®ã¯ããã¡ã€ã«ãåå²ããadd
é¢æ°ãå¥ã®ãã¡ã€ã«ã«åãåºããŸããã
éåžžã«åçŽãªäŸã§ãããäžã®äžã®Cèšèªããã°ã©ã ã¯ã倧äœåãæ§é ã§äœæãããŠããŸãã
ãã¡ã€ã«ã®äœæãçµãã£ãããã³ã³ãã€ã«ãè¡ããŸãã
äžèšã®ãšããã«ãæ£ç¢ºã«é çªã«ã³ãã³ããå®è¡ããŠäžããã
â»ã³ãã³ããå®è¡ããåŸã¯ãls -l
ã³ãã³ãã§å®è¡çµæã§ãã©ããªãã¡ã€ã«ãäœããããã確èªããŠäžããã
(1) func.c
ãã³ã³ãã€ã«
gcc -c func.c
=> func.o
ãåºæ¥ã
(2) main.c
ãã³ã³ãã€ã«
gcc -c main.c
=> main.o
ãåºæ¥ã
(3) ãªã³ã¯
gcc -o add main.o func.o
=> add
ã³ãã³ããåºæ¥ã
add
ã³ãã³ããå®è¡ãããšãæŒç¿1ãšåãçµæã«ãªããŸãã
(1) func.c
ãã³ã³ãã€ã«
gcc
ã®ãªãã·ã§ã³ã«-c
ãæå®ããŠããŸãã
ã€ãŸããå
ã»ã©è§£èª¬ããã³ã³ãã€ã«ã®æµãã®äžã®ãã³ãŒããžã§ãã¬ãŒã¿ã®éšåãŸã§å®è¡ããŠããŸãã
äœæãããfunc.o
ã¯ãªããžã§ã¯ããã¡ã€ã«(ãªããžã§ã¯ãã³ãŒããšããã)ã§ãã
ã¡ãªã¿ã«ã-c
ãä»ããã«gcc -o func func.c
ãšãããšãšã©ãŒã«ãªããŸãã
main
é¢æ°ãç¡ããããå®è¡å¯èœãã¡ã€ã«ãäœãããšãåºæ¥ãªãããã§ãã
=> æ¯éãè©ŠããŠèŠãŠãã ããã
(2) main.c
ãã³ã³ãã€ã«
åæ§ã«ãmain.cãã³ã³ãã€ã«ããŠããŸãã
ããããadd
é¢æ°ã¯main.c
ã§å®çŸ©ãããŠããªãã®ã«ãäœæ
ã³ã³ãã€ã«å¯èœãªã®ã§ããããïŒ
çç±ã¯ãcommon.h
ã«ãããã¿ã€ã宣èš(é¢æ°ã®å®çŸ©)ãæžãããŠããããã§ãã
ãã®ããããªã³ã¯ããåã®æ®µéãŸã§ãªããgcc -c
ã³ãã³ãã§ãªããžã§ã¯ããã¡ã€ã«ãçæããããšãå¯èœã§ãã
(3) ãªã³ã¯
æåŸã®ã³ãã³ãã§ãäºçš®é¡ã®ãªã³ã¯ãè¡ã£ãŠããŸãã
äžã€ç®ã¯ãéçãªã³ã¯ã§ãã
common.h
ã«èšè¿°ãããå®çŸ©ã§ãããªãã£ãadd
é¢æ°ã«é¢æ°å®äœããªã³ã¯ãããŠããŸãã
main.o
å
ã®add
é¢æ°ãšãfunc.o
ã®add
é¢æ°ã®å®äœããªã³ã¯ããŸãã
ãã®ããã«ãã³ãŒããšããŠå®éã«æžãããŠããé¢æ°ããªã³ã¯ããããšãéçãªã³ã¯ãšãããŸãã
=> èŠããã«èªåãæžããã³ãŒãã§ãã
äºã€ç®ã¯ãåçãªã³ã¯ã§ãã
main.c
ã§printf
ã³ãã³ããå®è¡ããŠããŸããããã¯å
±æã©ã€ãã©ãªã®é¢æ°ãå®è¡ããŠããŸãã
#include < >
ã§æå®ãããããããŒãã¡ã€ã«ã«èšè¿°ãããŠããé¢æ°ã¯å
±æã©ã€ãã©ãªã®é¢æ°ã§ãã
ãããã®é¢æ°ã¯ãå®è¡ãã¡ã€ã«å
ã«å«ããããšãåºæ¥ãŸããã
ãã®ãããå®è¡æã«å
±æã©ã€ãã©ãªãåç
§ãã圢ã§å®è¡ããŸãã
ãã®ããã«ãé¢æ°å®äœã§ã¯ãªããå
±æã©ã€ãã©ãªãåç
§ãã圢åŒã§ã®ãªã³ã¯ãåçãªã³ã¯ãšåŒã³ãŸãã
ãã³ãºãªã³ç¬¬äžåã®ããããã«ãªããŸããã以äžã®ã³ãã³ããå®è¡ããŠèŠãŠãã ããã
åçãªã³ã¯ã®å
±æã©ã€ãã©ãªã衚瀺ãããŸãã
- Linux
ldd add
- Mac
otool -L add
ãªãŒãã³ãœãŒã¹ã©ã€ã»ã³ã¹ãšããŠæåãªGPLã«ã€ããŠãäžèšã®ãããªè°è«ããã亀ããããŸãã
ãåçãªã³ã¯ãã¯ãã©ã€ã»ã³ã¹éåã«ãããã®ãïŒåŠãïŒ
ãã®GPLã®è°è«ã¯ããªã³ã¯ãšããæŠå¿µãç解ããåŸãããªããšå
šãåãããŸããã
å
ã»ã©åŠãã å
容ããèããã°ãå®è¡å¯èœãã¡ã€ã«å
ã«å«ãŸãããå®è¡æã«å
±æã©ã€ãã©ãªãåç
§ããè¡çºã¯ãã©ã€ã»ã³ã¹éåã«ãããã®ãïŒãšããããšã§ãã
éçãªã³ã¯ãå¯èœãªå Žåã¯ãå®è¡å¯èœãã¡ã€ã«å
ã«ä»è
ã®èäœç©ãå«ãã§ããŸã£ãŠããã®ã§ã¢ãŠããªãã ãªïŒ
ã£ãŠãã話ãããªã³ã¯ãç解ããŠãããè
¹èœã¡ããŠããŸãã
åçãªã³ã¯ã¯ãã³ã³ãã€ã«æã«ã©ã®ããã«ã³ã³ãã€ã©ã«åç
§ãããã®ã§ããããïŒ
ãããæ£ç¢ºã«ç解ããããšã¯ãå€éšã®ããã«ãŠã§ã¢ã®ã³ã³ãã€ã«çã§ãéåžžã«åœ¹ç«ã¡ãŸãã®ã§ãããå°ãã ãæ·±ãèŠãŠã¿ãŸãããã
(1) ãªããžã§ã¯ããã¡ã€ã«çææ
ãªããžã§ã¯ããã¡ã€ã«çææã¯ãããããŒãã¡ã€ã«å
ã«ãããã¿ã€ã宣èšãããã°ãã³ã³ãã€ã«åºæ¥ãŸãã
å ±æã©ã€ãã©ãªã®ããããŒãã¡ã€ã«ã¯ã以äžã®é çªã§æ¢çŽ¢ãããŸãã(å ¬åŒããã¥ã¡ã³ããã)
- /usr/local/include
- libdir/gcc/target/version/include
- /usr/target/include
- /usr/include
GCC - 2.3 Search Path
ç¹å®ã®ã©ã€ãã©ãªãŒã䜿ã£ãŠãäœããã³ã³ãã€ã«ããå Žåã¯develããã±ãŒãžãå¿
èŠã§ãã
ãžãããŒãã¡ã€ã«ã¯ãdevelããã±ãŒãžã«ã®ã¿ã€ããŠããŸãã
ã¡ãªã¿ã«äžèšä»¥å€ã®å Žæã«ããããŒãã¡ã€ã«ãããå Žåã¯ãäžèšã®ãªãã·ã§ã³ã§ããããŒãã¡ã€ã«ã®æ¢çŽ¢pathãè¿œå åºæ¥ãŸãã
-I/usr/hogehoge/
(2) åçãªã³ã¯æ
åçãªã³ã¯ãè¡ãéã¯ãããããŒãã¡ã€ã«ããã£ãŠãæå³ããããŸããã
å
±æã©ã€ãã©ãªã®æ¬äœãå¿
èŠã§ãã
Linuxã«ãããŠãå
±æã©ã€ãã©ãªãŒã®ããŒãã¯/lib/ld.so
ãè¡ããŸãã
ldconfig
ãšããã³ãã³ãã§ãå
±æã©ã€ãã©ãªãŒã®ããŒãpathã衚瀺åºæ¥ãŸãã
Macã«ãããŠã¯ãæ®å¿µãªããåãããŸããã§ããã»ã»ã»ã
åçãªã³ã¯æã«ã©ã€ãã©ãªãŒãèŠã€ãããªãçã®ãšã©ãŒãã§ãå Žåã¯ãäžèšã®ãªãã·ã§ã³ã§å ±æã©ã€ãã©ãªã®æ¢çŽ¢pathãè¿œå ã§ããŸãã
-L/usr/hogehoge/fugafuga
ããã«ãŠã§ã¢ããœãŒã¹ã€ã³ã¹ããŒã«ããæã«ãäžæããããªããŠStackoverflowãæ€çŽ¢ãããš
解çã®äžã«-I/fugafuga
ãæå®ããïŒãšãLD_LIBRARY_PATH
ã«è¿œå ããïŒãšãæžããŠãããŸãã
çµéšãããæ¹ãå€ããšæããŸãã
ç§ããæå³ãåãããè²ããªã³ãã³ããªãã·ã§ã³ãã€ããããç°å¢å€æ°ãèšå®ããŠã¿ããããŸããã
ãã®åœæã¯ãäœããã£ãŠããã®ãæå³äžæã§ããããåãã£ãŠããŸãã°ç°¡åã§ãã
ããããã«ãå ±æã©ã€ãã©ãªãŒã®ãªã³ã¯åé¡ãæ±ã£ãŠãããšããããã§ãã
ãŸãã«ãå
ã»ã©ãã£ãæŒç¿2ããã«ãã§ãã
ã€ãŸããã³ã³ãã€ã«ããŠãªã³ã¯ããŠãå®è¡å¯èœãã¡ã€ã«ãäœæããäžé£ã®æµãããã«ãã§ãã
æŒç¿1ã¯ãããŸãã«ãåçŽãªæ§æãªã®ã§ã³ã³ãã€ã«âãã«ãã«ãªã£ãŠãããšããããã§ãã
ãã®ãã«ãã§ãããçµæ§é¢åãããã®ã§ãã
æŒç¿2ã§ãããïŒã€ã®ã³ãã³ããæã€å¿
èŠããããŸãããããé çªããããŸãã
Cèšèªã§ã¯ãé¢åããããã«ãäœæ¥ãå¹çåããããã«ãmake
ã䜿ããŸãã
ãšãããããã£ãŠã¿ãŸãããïŒ
æŒç¿2ã§äœã£ããã£ã¬ã¯ããªã§MakefileãäœããŸãããã
=> æåéããMakefileãšããååã®ãã¡ã€ã«ãäœããŸãã
Makefile
all: clean func.o main.o
gcc -o add func.o main.o
func.o:
gcc -c func.c
main.o:
gcc -c main.c
clean:
rm -f *.o add
Makefileã®ã€ã³ãã³ãã¯ã¿ãã§ãã
åºæ¥äžãã£ãããmake
ã³ãã³ããå©ããŠäžããã
add
ãšããå®è¡å¯èœãã¡ã€ã«ãçæãããã°OKã§ãã
main.c
ã®è¶³ãç®ã®æ°åãå€æŽããŠãmakeã³ãã³ããå床å®è¡ããŠããã«ããçŽãããŠããããšã確èªããŠäžããã
makeã®è¯ãæã¯ãéåžžã«åçŽãšããããšã§ãã
make
ãšããã³ãã³ããå®è¡ãããšãMakefile
ã®å
é ã®ã³ãã³ããå®è¡ãããŸãã
ã³ãã³ãã¯ãã¹ããããããšãåºæ¥ãŸãã
ãã®äŸã§ã¯ãall
ãå®è¡ãããšãclean, func.o, main.o
ã®é çªã«ã³ãã³ããå®è¡ããŸãã
ããããã®ã³ãã³ãã®äžèº«ã¯ãããããã®ã³ãã³ãã®é ã«æžããŠããéãã§ãã
ã³ãã³ããæå®ããŠå®è¡ããããšãåºæ¥ãŸããmake clean
ãšæãŠã°clean
ã³ãã³ããå®è¡ã§ããŸãã
ãšãŠãåçŽã§ããããããžã§ã¯ãã倧ãããªããšMakefile
ãçµæ§è€éã«ãªããŸãã
make
ã®ãé°ã§ãã«ãã¯å€§å楜ã«ãªãã®ã§ãããããã§ããŸã ãŸã é¢åèããã§ãã
makefileãããèªåã§çæããŠããŸããïŒ
æ¥çã§æšæºçãªmakefileã«ãã¡ãããïŒ
å¿
èŠãªã©ã€ãã©ãªãŒã®ãã§ãã¯ãèªåã§ãã¡ãããïŒ
ãããªæåŸ
ã«å¿ããã®ãautotools
ã§ãã
æ§ãã®./configure
, make
, make install
ã§ãã
autotoolsã«é¢ããŠã¯ããšã«ãããã£ãŠã¿ãã®ãäžçªã§ãã
æ¬ãã³ãºãªã³ã§ãããšããããåçµåœ¢åŒã§ãautotools
ã®é¢é£ãã¡ã€ã«ãäœã£ãŠè¡ããŸãã
autoconf
, automake
ãã€ã³ã¹ããŒã«ããŸãã
brew install autoconf
brew install automake
Installing Autoconf, Automake & Libtool on Mac OSX
yum install autoconf
yum install automake
â»sudoããrootãŠãŒã¶ã§
apt-get install autoconf
apt-get install automake
â»sudoããrootãŠãŒã¶ã§
comp04
ãã£ã¬ã¯ããªãäœæããŠäžããã
æŒç¿2,3ã§äœ¿ã£ãmain.c
, func.c
, common.h
ãã³ããŒããŠäžããã
ã¹ã¿ãŒãæç¹ã§ã¯ãäžèšã®æ§æã§ãã
comp04
âââ common.h
âââ func.c
âââ main.c
bin_PROGRAMS=add
add_SOURCES=func.c main.c
autoscan
ã³ãã³ãã§ãé圢ãåºæ¥ãŸãã
autoscan
mv configure.scan configure.ac
configure.acã®äžèº«
ãã£ããé圢äœããŸããããæå°æ§æã«ãããããã»ãšãã©åé€ããŸã
AC_INIT([ADD PROGRAM], [1.0])
AM_INIT_AUTOMAKE
AC_PROG_CC
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
aclocal
autoconf
=> aclocal
ã³ãã³ãã§ãaclocal.m4
ãšãããã¡ã€ã«ãåºæ¥ãŸããautoconf
ã«å¿
èŠãªã³ãã³ãé¡ã§ãã
automake -a -c --foreign
-a
,-c
ã¯autotools
ãå¿
èŠãšããã³ãã³ã矀ãã³ããŒããŠé
眮ããŠãããŸãã
install-sh
, missing
, depcomp
, compile
ãšããããã«ããããŸãã
--foreign
ã¯ãGNUãããžã§ã¯ãã®ããããã«åŸãäžèšã®ãã¡ã€ã«çŸ€ãçšæããªãããšãæå³ããŸãã
- NEWS
- README
- AUTHORS
- ChangeLog
=> ä»åã¯ã·ã³ãã«ãªautotools
ãç®æãã®ã§ãããã®ãã¡ã€ã«ã¯ç¡èŠããŸãã
./configure
make
make install
â»/usr/local/bin
ã«ã€ã³ã¹ããŒã«ãããã®ã§ãåŸã§åé€ããŠãããŸãããã»ã»ã»
- Makefile.am
=> ã³ãã³ãåã察象ãã¡ã€ã«ãèšè¿°ãã - configure.ac
=> configureã³ãã³ãã§ãã§ãã¯ããäžèº«ãèšè¿°ãã => ããããŒãã¡ã€ã«ããã©ã€ãã©ãªãŒã®ãã§ãã¯ãšãããããã§ãããŸãã
AC_CHECK_HEADERS([stdlib.h string.h sys/param.h unistd.h])
AC_CHECK_LIB(readline, rl_digit_argument, [], [
echo "Error! readline-devel is required."
exit -1
])
ãã以å€ã®ãã¡ã€ã«ã¯ãautotools
ã®ã³ãã³ãã§èªåçæããŸãã
ls -l
ããŠã¿ãŸããããæ§ãã®ä»£åãšããŠãããã«å€ãã®ãã¡ã€ã«ãå¿
èŠãšãããã®ããåãããŸãïœ
æåã¯3ãã¡ã€ã«ã§ãããã»ã»ã»ã
ã¡ãªã¿ã«ã§ãããæ®éã¯Cèšèªã®ãããžã§ã¯ãã§ã¯ãããžã§ã¯ãã«ãŒãã«ãœãŒã¹ã³ãŒããé
眮ããŠãªãã§ãã
src
ãšãããã£ã¬ã¯ããªãäœã£ãŠããã®äžã«é
眮ããããšãå€ãã§ãã
autotools
ãŸã§ããã°ãéåžžã®Cèšèªãããžã§ã¯ãã«å¯Ÿå¿ã§ããäžå°ãåºæ¥ãããšã«ãªããŸãã
ãããã2015幎ã§ãããããŠããããã¹ãã«ã€ããŠããåºæ¬ãæããŠãããŸãããã
æããããšã¯ãããŸãããä»æ¥ãã§ã«åŠãã å
容ã§å
åç解ã§ããŸãã
ã€ãŸãããªã³ã¯ã§ãã
Google TestãšããCèšèªã®ãŠããããã¹ãããŒã«ãGoogleããæäŸãããŠããŸãã
Travis CIã§ã®å®è£
äŸããããäžã«è»¢ãã£ãŠããŸãã®ã§ãåå¿è
ã«ãããããã¹ãã»ããŒã«ã§ãã
æŒç¿2ã®ãã¡ã€ã«çŸ€ãããäžåºŠçšæããŠäžããã
comp05
âââ common.h
âââ func.c
âââ main.c
Google Testããã§ãã¯ã¢ãŠãããŠããã¹ãçšã©ã€ãã©ãªãŒããã«ãããŠãããŸãã
comp05ãã£ã¬ã¯ããªå
ã§å®è¡ããŠäžããã
svn co http://googletest.googlecode.com/svn/trunk gtest
mkdir build
cd build
cmake ..
make
comp05ãã£ã¬ã¯ããªçŽäžã«ãtest.cppãšãããã¡ã€ã«ãäœã£ãŠãã ããã
äžèº«ã¯ã以äžã®ãšããã§ãã
#include <gtest/gtest.h>
extern "C"
{
#include "common.h"
}
TEST(SetConstructTest, ConstructFromArray)
{
ASSERT_EQ(12, add(4, 8));
ASSERT_EQ(9, add(4, 5));
}
int main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
Testçšã®å®è¡ãã¡ã€ã«ãäœæããã
gcc -c func.c
clang++ -std=c++11 -g -Wall -Wextra -c test.cpp -I./gtest/include
clang++ -std=c++11 -g -Wall -Wextra -o test func.o test.o -lgtest -L./gtest/build
Testå®è¡
./test
Testèªäœã¯c++ã§æžããŸãããå 容ã¯ãŠããããã¹ããªã®ã§ããªããšãªãåãããšæããŸãã
func.c
ã®add
é¢æ°ããã¹ãããŠããŸãã
ãã¹ãçšã®å®è¡ãã¡ã€ã«ãäœæããããã«ãäžèšã®ããšããã£ãŠããŸãã
func.c
ã®ãªããžã§ã¯ããã¡ã€ã«ãäœæ
=>add
é¢æ°ã®å®äœã¯func.o
ã§ããtest.cpp
ã®ãªããžã§ã¯ããã¡ã€ã«ãäœæ
=>add
é¢æ°ã®ãã¹ããè¡ããŸãããå®çŸ©ããåããã°ã³ã³ãã€ã«ã¯åºæ¥ãŸãããïŒãªã®ã§ãå é ã§ããããŒãã¡ã€ã«ãinclude
ããŠãŸããfunc.o
ãštest.o
ããªã³ã¯ããŠãå®è¡å¯èœãã¡ã€ã«ãäœããŸãã
=> æŒç¿2ãšåºæ¬ã¯äžç·ã§ãã
ã€ãŸãããã¹ãã®å®è¡å¯èœãã¡ã€ã«ã¯ããã¹ãå 容ã®ãªããžã§ã¯ããã¡ã€ã«ãšããã¹ã察象ã®é¢æ°ã®ãªããžã§ã¯ããã¡ã€ã«ãéçãªã³ã¯ãããã®ã§ãã
ãªããããããã®ã³ãã³ãã§ã¯-I
, -L
ã§ããããGoogle Testã®ããããŒãã¡ã€ã«ãšãå
±æã©ã€ãã©ãªã®PATHãæå®ããŠãŸãã