- 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ãæå®ããŠãŸãã
