ãã®èšäºã®ãããã±ãŒãžããšããèšèã¯ãç¹å®ã®GNU / Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã®ããã±ãŒãžã§ã¯ãªãããœãŒã¹ããã±ãŒãžãæå³ããŸããããœãããŠã§ã¢ã®å ã®äœè ã«ããããã±ãŒãžã®ã¿ãæå³ããŸãïŒ2017-02-09ããã®UPD ïŒæèããæãããªå Žåãé€ããŸãïŒ ãããã±ãŒãžããšããèšèãå¥ã®æå³ã§äœ¿çšãããŠããããšïŒã
ãã®èšäºã§ã¯ã次ã®è³ªåãåæããŸãã
- ããã§ãããã°ã©ã ãŸãã¯ã©ã€ãã©ãªãããŠã³ããŒãããŸããã çµã¿ç«ãŠãŠã€ã³ã¹ããŒã«ããæ¹æ³ã¯ïŒ ã©ã€ãã©ãªã®äœ¿çšæ¹æ³ã¯ïŒ
- ã€ã³ã¹ããŒã«ãã¬ãã£ãã¯ã¹ãšã¯äœã§ããïŒ ã¢ã»ã³ããªãšã€ã³ã¹ããŒã«ã®éãã¯äœã§ããïŒ åœŒãã¯éåžžã©ãã«ããã°ã©ã ãã€ã³ã¹ããŒã«ããŸããïŒ
éåžžã«åºæ¬çãªããšã ããåæããŸãã UNIXã«äŒŒãã·ã¹ãã çšã®Cããã³C ++ã§ããã°ã©ãã³ã°ãããããªãŒãœãããŠã§ã¢ã³ãã¥ããã£ã®å žåçãªã¡ã³ããŒã¯ãéåžžãã§ã«ç¥ã£ãŠããŸãã tarballã®äœææ¹æ³ïŒã裞ã®ãmakeã®äŸã䜿çšïŒããã³ä»ã®äººã®tarballã®èšå®æ¹æ³ã ãè¯ããããã±ãŒãžãäœæããããã®é«åºŠãªãã³ãã¯æäŸããŸããã Debianã®ãã°ãããèšäºãã¢ããã¹ããªãŒã ã¬ã€ããã§ããã«ãã·ã¹ãã ã®ããã¥ã¡ã³ãã®ãé«åºŠãªãããšãèªãã§ãã ããïŒæåŸã«ãè¯ããããã±ãŒãžãäœæããããã®ãªã³ã¯ããŸã ãããããããŸãïŒã ç§ã®ç®æšã§ãããã®èšäºã§ã¯ãå€ãã®ããšãç°ãªãæ¹æ³ã§è¡ãããšãã§ããŸããåºå€§ããææ¡ããããšããã®ã§ã¯ãªããå°ãªããšã1ã€ã®æ¹æ³ãäžããããšã§ãã
ç§ã¯ããªãã«èŠåããŸãïŒå§ãŸãã¯éåžžã«ã·ã³ãã«ã«ãªããŸãããçµããã«è¿ã¥ããšãã£ãšé¢çœããªãã§ãããã
ãããŠããäžã€ã®èŠåã ç§ã¯äžäººã®ããã«æ¥ãã§ãã®èšäºãæžããŸããã ãããŠãæžããåŸãç§ã¯æžããã®ã§ãæ¶ããªãããã«Habrã«æçš¿ããã ãããšåœŒãã¯èšããšæããŸããã ãããã£ãŠãèšäºã®ãããŸããªæ§é åãã å å«èªäœãå®è¡ããªã ããªã©ã®ãã¬ãŒãºãªã©ãèšäºã«æ¬ é¥ããããŸãããããä¿®æ£ããŸããã ãã¶ãã次ã®äººçã®ãã€ããæãå±ããŸãã éžæã¯ãæçš¿ããããŸã£ããæçš¿ããªããã§ããã
ãã®ãããHelloãworldããã°ã©ã ã§ããã±ãŒãžãäœæããããšããå§ããŸãã ãŸãããã«ãã·ã¹ãã ã決å®ããŸãããã
å®éã«ã¯ãããã±ãŒãžèªäœã¯éåžžmakeããã°ã©ã ã䜿çšããŠãã«ããããŸãïŒãã ãããããå¯äžã®æ¹æ³ã§ã¯ãããŸããïŒã makeã®æ§æã¯éåžžãMakefileãšãããã¡ã€ã«ã«ãããŸãã
ããã€ãã®ãªãã·ã§ã³ããããŸããåã«makeã䜿çšããããmakeãšäžç·ã«é«ã¬ãã«ã®ãã«ãã·ã¹ãã ïŒéåžžã¯autotoolsãŸãã¯cmakeïŒã䜿çšããŸãããããã¯å®éã«makeã®æ§æãçæããŸãã
ãã®äŸã§ã¯ãç°¡åã«ããããã«makeã®ã¿ã䜿çšããŸãã ãããã£ãŠãhello.cãäœæããŸãã
#include <stdio.h> int main (void) { printf ("Hello, world!\n"); return 0; }
ããŠãMakefileïŒ
泚æïŒ GNU / LinuxãæèŒã macOSã§ã®åäœã¯ä¿èšŒãããŠããŸããïŒ ãã®Makefileã¯ããã¹ãŠã®UNIXã©ã€ã¯ã·ã¹ãã ã§ãŸã£ãã移æ€æ§ããããŸããïŒ æ¬¡ã¯ããã«ç¶ããŸãã
ããã§<------>ã¯ã¿ãæåãæå³ããŸãã
PREFIX=/usr/local CC=cc CFLAGS= all: hello hello: hello.c <------>$(CC) $(CFLAGS) -o hello hello.c install: all <------>mkdir -p $(PREFIX)/bin <------>install hello $(PREFIX)/bin/
ããã¯ããã®Makefileãæžãå¯äžã®æ¹æ³ããã¯ã»ã©é ãã§ãã äžè¬ã«ãç§ã®èšäºå šäœã®ç®çã¯ãäœããã®åºç€ãæäŸããããšã§ãã ãã®Makefileã§ä»ã«å€æŽã§ãããã®ã¯ãä»ã®ãœãŒã¹ããåŠã¶ããšãã§ããŸãã
ãŸãããã®èšäºã§ã¯ãmakeã«é¢ããéåžžã«åºæ¬çãªããšãç¥ã£ãŠããããšãåæãšããŠããŸãã ã€ãŸããMakefileã¯äŸåé¢ä¿ããªãŒã®èª¬æã§ããããã«ãããå¿ èŠã®ãããã¡ã€ã«ãæ£ç¢ºã«åéããããã«å¿ èŠã§ããããšãç¥ã£ãŠããŸãã ãã®èšäºã§ã¯ãããã±ãŒãžã®äœææã«makeã䜿çšããããšãã€ã³ã¹ããŒã«ãªã©ã®ãä»®æ³ãmakeã®ç®æšã«ã€ããŠèª¬æããŸãã ãŸããã³ãã³ãã©ã€ã³ããã³ã³ãã€ã©ãèµ·åããæ¹æ³ã«ã€ããŠãéåžžã«åºæ¬çãªããšãã€ãŸã
cc -o hello hello.c
äœã§ããããæ¢ã«ç¥ã£ãŠãããšæ³å®ããŠããŸãã
ããã§ã¯ãMakefileã解æããŸãããã
ãŸãã次ã®ããã«èšããŸãã ãŠãŒã¶ãŒãããã±ãŒãžãããŠã³ããŒããããšããŸãã 圌ã¯æåã«ãããåéããå¿ èŠããããŸããã€ãŸããããã±ãŒãžèªäœãšäžç·ã«ãã£ã¬ã¯ããªå ã®ãã€ããªãååŸããŸãïŒãŸãã¯ããªãŒæ§ç¯ã®å Žåã¯ãæ¬è³ªãå€æŽããªãä»ã®ãã£ã¬ã¯ããªã«ããããååŸããŸãïŒã次ã«ã€ã³ã¹ããŒã«ãã€ãŸãçµæã®ãã€ããªãã³ããŒããŸãã·ã¹ãã å ã®æçµã¹ãã¬ãŒãžã®å Žæã
ã€ãŸããèŠãŠãã ããã ãŠãŒã¶ãŒuserãšããŠãã°ã€ã³ããŠããŸãã ããŒã ãã£ã¬ã¯ããªã¯/ home / userã§ãã / home / user / Desktop / fooã®ããã«ãããã±ãŒãžãããŠã³ããŒãããŠè§£åããŸããã 次ã«ããããåéããŸããã åããã©ã«ã/ home / user / Desktop / fooã«åéãããŸãã ãŸãã¯ãããªãŒãã«ã以å€ã®å Žåã¯ãå¥ã®ãã©ã«ããŒ/ home / user / Desktop / foo-buildãäœæããŠããã«é 眮ããŸãã ããŠããã«ãåŸã/ usr / localã«ã€ã³ã¹ããŒã«ããããšã«ããŸããã ããã§ã¯ããã§ã«ã«ãŒãæš©éãå¿ èŠã§ãã sudoã䜿çšããŠããã®ããã°ã©ã ã/ usr / localã«ã€ã³ã¹ããŒã«ããŸãã
ã·ã¹ãã å ã®ãã£ã¬ã¯ããªã®é 眮ã«é¢ããããã€ãã®èšèã ããã€ãã®ãã£ã¬ã¯ããªã®ã¿ãåæããŸãã 詳现ã«ã€ããŠã¯ãFilesystem Hierarchy StandardïŒå€ãã®GNU / Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã§ãµããŒããããŠããŸãïŒããã³GNU / Linuxããã³ãã®ä»ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã³ãã³ããman 7 hierããåç §ããŠãã ããã ãããã«ãããããããã©ã®ããã«é 眮ãããããããšãã°çŽ5幎åïŒã€ãŸãã2012幎ã®ã©ããïŒãæè¿ã®Fedoraãªã©ã®ããããçš®é¡ã®æ°ãããã¬ã³ããããã¹ãŠã/ usrã«ç§»åããŸãããããšèšããŸããç§ã¯èæ ®ããŸããã
- / binã¯ãã·ã¹ãã ãããŒãã®åæ段éã§æ©èœããããã«éèŠãªãã€ããªïŒå®è¡å¯èœãã¡ã€ã«ïŒã§ãã
- / sbinã¯åãã§ãããéåžžããã€ããªã®ã¿ããããã®ãã€ããªãå®è¡ã§ããŸãã
- / lib-/ binããã³/ sbinããã®ããã°ã©ã ã«å¿ èŠãªã©ã€ãã©ãªãã€ããª
- / usr-ããã¡ã€ã«ã®2çªç®ã®éå±€ããã€ãŸããããã1ã€/ã
- / usr / binã¯/ binãšåãã§ãããä»åã¯èµ·åã«éèŠã§ã¯ãªããã€ããªã§ã
- / usr / sbin-/ sbinãšåãã§ãããèµ·åããã®ã«éèŠã§ã¯ãããŸãã
- / usr / lib-/ binããã³/ sbinããã®ããã°ã©ã ã«ã¯äžèŠãªã©ã€ãã©ãªãã€ããª
- / usr / include-ã©ã€ãã©ãªããããŒ
- / usr / local-ã3çªç®ã®ãã¡ã€ã«éå±€ããããã«ã¯/ usr / local / binã/ usr / local / sbinã/ usr / local / libããã³/ usr / local / includeãå«ãŸããŸããããŒã«ã«ç®¡çè ãã ããã¯ã©ãããæå³ã§ããïŒ ããã¯ãïŒããã±ãŒãžãããŒãžã£ãŒã䜿çšããGNU / Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã®å ŽåïŒãåè¿°ã®ãã£ã¬ã¯ããªãããã±ãŒãžãããŒãžã£ãŒã®å¶åŸ¡äžã«ããããšãæå³ããŸãã ãã ãã/ usr / localå ã®ãã£ã¬ã¯ããªã¯ããããŒã«ã«ç®¡çè ããã€ãŸãããªããèªç±ã«äœ¿çšã§ããŸãã ããã±ãŒãžãããŒãžã£ãŒããã€ãã¹ããŠããœãŒãããäœãã眮ãããå Žåã¯ãããã«çœ®ãããšãã§ããŸãã
ãã¬ãã£ãã¯ã¹ã«ã€ããŠèª¬æããŸãã ããã±ãŒãžãã€ã³ã¹ããŒã«ãããšãããããããã¬ãã£ãã¯ã¹ãã€ãŸãããã¹ãŠãã€ã³ã¹ããŒã«ããããã£ã¬ã¯ããªãæå®ããå¿ èŠããããŸãã ãã®ãã£ã¬ã¯ããªã«binãµããã£ã¬ã¯ããªãäœæãããããã«ãã€ããªãã€ã³ã¹ããŒã«ãããlibãµããã£ã¬ã¯ããªãäœæãããã©ã€ãã©ãªã®ãã€ããªãããã«ã€ã³ã¹ããŒã«ãããŸãã
ã€ãŸããããšãã°ãæ¥é èŸ/ usr / localãæå®ããŠããã±ãŒãžãã€ã³ã¹ããŒã«ããŸãã 次ã«ããã€ããªã¯/ usr / local / binã«ç§»åããã©ã€ãã©ãªã®ãã€ããªã¯/ usr / local / libã«ç§»åããŸãã
ããã§ãMakefileã®è§£æã«æ»ããŸãã PREFIX-ããã¯å ã»ã©ã話ããããã¬ãã£ãã¯ã¹ã§ãã ããã©ã«ãã®ãã¬ãã£ãã¯ã¹ïŒãŠãŒã¶ãŒãåå®çŸ©ã§ããŸãïŒãšããŠã/ usr / localãæå®ãããŠããŸã-ããã©ã«ãã®é©åãªéžæè¢ã§ãã éåžžãããã±ãŒãžãäœæãããšãã¯åžžã«ããã©ã«ãã®ãã¬ãã£ãã¯ã¹ãšããŠç€ºãããŸãïŒæ®å¿µãªãããäžéšã®ããã±ãŒãžã¯ãŸã ãããè¡ã£ãŠããŸããããåŸã§ããã«è¡ãããŸãïŒã 次ã¯CCã§ãã ããã¯ãã³ã³ãã€ã©ãé 眮ãããmakeå€æ°ã®æšæºåã§ããããã®å Žåã¯ccã§ãã ccã¯ãç¹å®ã®ã·ã¹ãã ã§ããã©ã«ãã®ã³ã³ãã€ã©ãèµ·åããããã«äžè¬çã«äœ¿çšãããã³ãã³ãã§ãã gccãŸãã¯clangã«ããããšãã§ããŸãã äžéšã®ã·ã¹ãã ã§ã¯ãccã³ãã³ãã䜿çšã§ããªãå ŽåããããŸãã CFLAGSã¯ãã³ã³ãã€ã«ãã©ã°ãæã€å€æ°ã®æšæºåã§ãã
makeãšå ¥åããã ãã§ãMakefileã®æåã«æ¥ãç®æšãéæãããŸãã äžè¬çãªæ¹æ³ã¯ããã¹ãŠãåŒã³åºãããšã§ãã ãããŠããã®ãããªç®æšã¯éåžžããããžã§ã¯ãå šäœãåéããŸãããäœã確ç«ããŸããã éåžžããã®ã¿ãŒã²ããã¯ãä»®æ³ãã§ããã€ãŸããallãšãããã¡ã€ã«ã¯ãããŸããã ã¿ã¹ã¯ã¯helloãã€ããªã1ã€ã ãåéããããšãªã®ã§ããã¹ãŠãhelloã«äŸåãããã ãã§ãã 以äžã¯ãhelloã¢ã»ã³ããªã®ç®çã®èª¬æã§ãã ååãšããŠãhello.cã®ã¢ã»ã³ããªhello.oãšhello.oã®ã¢ã»ã³ããªhelloã®2ã€ã®æ®µéã«åããããšãã§ããŸãã ç°¡åã«ããããã«ãããããŸããã§ããã
次ã¯ã€ã³ã¹ããŒã«ãã€ã³ã¹ããŒã«ã§ãã ãããä»®æ³ç®æšã§ãã ããã¯ãã¹ãŠã«äŸåããŸãã ããã¯ããŠãŒã¶ãŒããmakeããªãã§ãmake installããšããã«å ¥åããå Žåã«è¡ãããŸãã ãã®ç®çã®ããã«ãæåã«ã€ã³ã¹ããŒã«ãããã©ã«ããŒãã€ãŸããäºæ³ã©ãã$ïŒPREFIXïŒ/ binãäœæãããã®äžã«ã€ã³ã¹ããŒã«ãŠãŒãã£ãªãã£ãã€ã³ã¹ããŒã«ããŸãã
ã€ã³ã¹ããŒã«ã¯äœãããŸããïŒ ããã¯cpãšã»ãŒåãã§ãã æ£ç¢ºãªéãã¯ããããŸããã ããã°ã©ã ãã€ã³ã¹ããŒã«ããã«ã¯ãcpã§ã¯ãªãinstallã䜿çšããå¿ èŠããããŸãã
ãã€ããªã¯$ïŒPREFIXïŒ/ binã«èšå®ãããŸããããããŸãã«ããªããããå¿ èŠãããããšã ããã§ãã ãã€ããªã¯ãã¬ãã£ãã¯ã¹ã®binãµããã£ã¬ã¯ããªã«ç§»åãããã€ããªã¯PREFIXã®libã®ã©ã€ãã©ãªã«ç§»åããŸãã
ããã§ã¯ãã·ã¹ãã ã«ããããBSDã€ã³ã¹ããŒã«ãã€ã³ã¹ããŒã«ãããŠãããšä»®å®ããŸãã GNU / Linuxã§ã¯ãããã§ãã äžéšã®ã·ã¹ãã ã§ã¯ãããã§ãªãå ŽåããããŸãã ãã®ç¶æ³ã§ã¯æ©èœããªãä»ã®ã€ã³ã¹ããŒã«ãååšããå¯èœæ§ããããŸãã ããã¯ãç°ãªãOSã§ã®åäœãä¿èšŒãããªããšèšã£ããšããç§ã念é ã«çœ®ããŠãããã®ã§ãã
ããã§ã¯ãDESTDIRã¯èæ ®ããŸããã§ãããDESTDIRã¯ãMakefileã§ã®äœ¿çšã匷ããå§ãããŸãã ãããã«ãããšããç®æšããèããŠããŸããã§ããã
ããŠãæåŸã®tarballãæ¡åŒµå.tar.gzã.tar.xzãªã©ã®ãããããã¡ã€ã«ãäœæããŸãããã hello.cããã³Makefileãã¡ã€ã«ãhello-1.0ãã©ã«ããŒã«é 眮ããŸãïŒtarballã®äœææã«ããŒãžã§ã³çªå·ãæå®ããã®ãäžè¬çã§ãïŒã 次ã«ãçŸåšã®ãã£ã¬ã¯ããªãhello-1.0ãå«ããã£ã¬ã¯ããªã«èšå®ãã次ã®ããã«å ¥åããŸãã
tar --xz -cf hello-1.0.tar.xz hello-1.0
ããã«ãããhello.cãšMakefileãå«ãhello-1.0ãã£ã¬ã¯ããªãããã¢ãŒã«ã€ããäœæãããŸãã ããã¯ããã±ãŒãžãé åžããæ¹æ³ã§ãã
C ++ã¯ããã±ãŒãžã®ããªã¢ã³ãã§ãã ãœãŒã¹ã¯åãã§ãhello.cppãšåŒã°ããå¿ èŠããããŸãã ã¡ã€ã¯ãã¡ã€ã«ã¯æ¬¡ã®ããã«ãªããŸãã
PREFIX=/usr/local CXX=c++ CXXFLAGS= all: hello hello: hello.cpp <------>$(CXX) $(CXXFLAGS) -o hello hello.cpp install: all <------>mkdir -p $(PREFIX)/bin <------>install hello $(PREFIX)/bin/
C ++ã³ã³ãã€ã©ã®ãã©ã°ã®æšæºå€æ°åã¯ãCPPFLAGSã§ã¯ãªãCXXFLAGSã§ããããšã«æ³šæããŠãã ããã CPPFLAGSã¯ãCããªããã»ããµãžã®ãã©ã°ã®å€æ°ã®ååã§ãã
次ã«ããœãŒãïŒä»»æãããã°ã©ã ãã©ã€ãã©ãªïŒããããã±ãŒãžãã€ã³ã¹ããŒã«ããæ¹æ³ãèããŠã¿ãŸãããã ãã«ãã·ã¹ãã ã«é¢ä¿ãªãã ãã®ã¢ã«ãŽãªãºã ã¯ãäœæããtarballã«ãé©ããŠããŸãã ãã«ããããããã±ãŒãžãhelloãšãåŒã°ããŠãããšããŸãã
æåã®ã¹ãããïŒããŠã³ããŒãããŠããœãŒãããããã©ã«ããŒã«ç§»åããŸãã 2ã€ã®ãªãã·ã§ã³ããããŸãïŒããŒãžã§ã³ç®¡çã·ã¹ãã ããã®ããŠã³ããŒãïŒããšãã°gitãåæããŸãïŒãŸãã¯tarballã®ããŠã³ããŒãã
æåã®ãªãã·ã§ã³ã gitã ã¯ããŒã³ãäœæïŒ
git clone <>
ããã«ãããhelloãã©ã«ããŒãäœæãããŸãã ããŒãžã§ã³ç®¡çã·ã¹ãã ããããŠã³ããŒããããããããŒãžã§ã³çªå·ãªãã cdãäœæããããã©ã«ããŒãã€ãŸã
cd hello
ãŸãã
2çªç®ã®ãªãã·ã§ã³ã ã¿ãŒããŒã«ã tarballãããŠã³ããŒãããŸãã 次ã«ãã³ãã³ã
tar -xf hello-1.0.tar.xz
ãŸãã ããã«ãããããšãã°
hello-1.0
ãªã©ã®ãã©ã«ããŒãäœæãããŸãã éåžžãããã±ãŒãžã®äœæè ããã¹ãŠãæ£ããè¡ã£ãå Žåããã©ã«ããŒåã«ã¯ããŒãžã§ã³çªå·ãå«ãŸããŸãã 次ã«ãçµæã®ãã©ã«ããŒã«cdãäœæããŸãïŒäŸïŒ
cd hello-1.0
ã
ä»ãããªãã¯åéããå¿ èŠããããŸãã ç°¡åã«ããããã«ãããªãŒãã«ãã䜿çšããªãããšãåæãšããŸãïŒããã±ãŒãžã®äœæè ãããªãŒãã«ãã䜿çšããªãå Žåãéåžžããã®æ¹æ³ã«ã€ããŠã®èª¬æãããã«æžãããŠããŸãïŒã ãã®ããã䞊ã¹æ¿ããå Žæãšåããã©ã«ãã«åéããŸãã ã€ãŸããcdãäœæããã°ããã®ãã®ãã©ã«ããŒã
以éã®ã¢ã¯ã·ã§ã³ã¯ããããžã§ã¯ãã§éžæããããã«ãã·ã¹ãã ã«ãã£ãŠç°ãªããŸãã ãã ãããã«ãã·ã¹ãã ã«é¢ä¿ãªãããã«ãããã»ã¹äžã«ãã¬ãã£ãã¯ã¹ãæå®ããå¿ èŠããããŸãã ãŸããéåžžããã¬ãã£ãã¯ã¹ã¯ãã€ããªå ã«ããŒãã³ãŒãã£ã³ã°ããããããã€ã³ã¹ããŒã«æ®µéã§ã¯ãªããã¢ã»ã³ããªæ®µéã§æå®ããå¿ èŠããããŸãã ãããŠããã¯ãç¹å®ã®å Žæã«ããã°ã©ã ãã€ã³ã¹ããŒã«ããåŸãããªãã¯ããããã åãããŠç§»åããããšãã§ããªãããšãæå³ããŸãã
ããã§ã¯ãã»ãšãã©ã®å Žåã«æ©èœãããµã³ãã«ã®æé ã瀺ããŸãã ãããžã§ã¯ãã®äœè ããã®æ£ç¢ºãªæ瀺ã衚瀺ãããŸããã埮åŠãªéãããããããããŸããã
äœææã«å¿ ããã¬ãã£ãã¯ã¹ãæå®ããŠãã ããïŒäœæè ãæ瀺ã«èšèŒãããã®ã¯äœã§ãïŒã æå®ããªãå Žåãããã©ã«ããéžæãããŸãã ããã¯éåžž/ usr / localã§ãããããã¯ããªãè¯ãéžæã§ãã ããã§ãªãå Žåã¯ïŒ ããã±ãŒãžã®äœæè ãä»ã®ããã©ã«ããã¬ãã£ãã¯ã¹ãæå®ããå Žåã¯ã©ããªããŸããïŒ ã©ãã«ã€ã³ã¹ããŒã«ãããã¯æ確ã§ã¯ãããŸããã ç¹ã«ãlibqglviewerã¯ããã©ã«ãã®ãã¬ãã£ãã¯ã¹ãšããŠ/ usrã䜿çšããŸãããããã¯å®å šã«ééã£ãŠããŸãïŒãã°ã¬ããŒããäœæè ã«éä¿¡ããŸããïŒã ãã®ããã絶察ã«åžžã«ãã¬ãã£ãã¯ã¹ãæå®ããŸãã èè ãèªåã®ãµã€ãã§æã瀺ããŠããæ瀺ãèªã¿ãæ¥é èŸã眮ãå ŽæãèŠã€ããŸãã
ããã§ãã©ããªãã«ãã·ã¹ãã ãã§ããã®ãã ãŸããããã¯ãã ã®ã¡ã€ã¯ãããããŸããã ãã¢ã¡ã€ã¯ã®ãã®ãªãã·ã§ã³ã¯ãŸãã§ãã 裞ã®makeãåããæ°å°ãªãããã±ãŒãžã®1ã€ã¯bzipïŒ www.bzip.org ïŒã§ãã äœæããhello-1.0.tar.xzã®å ŽåããŸãã«ãã®ãããªãªãã·ã§ã³ããããŸãã
ãããã£ãŠããã¢ã¡ã€ã¯ã®å Žåã«ãã«ãããã«ã¯ããããå¿ èŠã§ãïŒ
make PREFIX=/---
ïŒå ·äœçã«ã¯ãbzipã®å Žåããã«ã段éã§PREFIXãæå®ããå¿ èŠã¯ãããŸãããããããçè«çã«ã¯ããã€ããªå ã§PREFIXãããŒãã³ãŒãããããã±ãŒãžãæ³åã§ããŸãããããã£ãŠãäžè¬ã«PREFIXãå¿ èŠã§ããïŒ
次ã®ãªãã·ã§ã³ã¯autotoolsã§ãã ãã®å Žåã次ã®ããã«çµã¿ç«ãŠãŸãã
./configure --prefix=/--- make
次ã®ãªãã·ã§ã³ã¯cmakeã§ãã ãã®ããã«é 眮ããŸãïŒcmakeã³ãã³ãã®æåŸã®ãã€ã³ãã«æ³šæããŠãã ããïŒïŒ
cmake -DCMAKE_INSTALL_PREFIX=/--- . make
æåŸã®ãã€ã³ãã¯ã©ãã§ããïŒ å®éã®ãšãããcmakeã¯ãã¹ãé ã«æž¡ãå¿ èŠããããšããããšã§ãã ãŸããããªãŒãã«ãã䜿çšããŠããªããããããã§åéããŸãã ç§ãã¡ãããã®ã¯éè¡åž«ã§ãã ãããã£ãŠããã€ã³ããã€ãŸãçŸåšã®ãã£ã¬ã¯ããªã
autotoolsããã³cmakeã®å ŽåãMakefileãçæããã³ãã³ãïŒã€ãŸã./configureãŸãã¯cmakeïŒã¯make configã«ãã¬ãã£ãã¯ã¹ãæžã蟌ããããmakefïŒããã³åŸè¿°ããmake installã³ãã³ãïŒã¯ãã¬ãã£ãã¯ã¹ãæå®ããå¿ èŠããããŸããã
ãããã£ãŠããããã®ã¡ãœããã®1ã€ãåéããŸããã 次ã¯ïŒ ããã§ã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
ãã¢ã¡ã€ã¯ã®å Žåãããã¯æ¬¡ã®ããã«è¡ãããŸãã
make PREFIX=/--- install
ã¢ã»ã³ããªäžã«æå®ãããã®ãšåããã¬ãã£ãã¯ã¹ãæå®ããå¿ èŠããããŸãã
ãã®ãããªautotoolsãšcmakeã®å ŽåïŒ
make install
ãã¬ãã£ãã¯ã¹ã«æžã蟌ãããã«sudoãå¿ èŠãªå Žåã¯ãsudoã§ã€ã³ã¹ããŒã«ããããã«ãã®ã³ãã³ããå ¥åããå¿ èŠããããŸãã äžè¬ã«ãã¢ã»ã³ããªã¯åžžã«éåžžã®æš©éã§å®è¡ãããŸãããã€ã³ã¹ããŒã«ã¯ãã¬ãã£ãã¯ã¹ã«æžã蟌ãããã«å¿ èŠãªæš©éã§å®è¡ãããŸãã
ããŠãä»åºŠã¯äœããããèŠãŠã¿ãŸãããã äœãã€ã³ã¹ããŒã«ãããåã«äœæããhello-1.0.tar.xzãã€ã³ã¹ããŒã«ãããšããŸãã ãŸããæå®ãããã¬ãã£ãã¯ã¹ã/ fooã§ãããšä»®å®ããŸãã 次ã«ããã©ã«ããŒ/ fooã/ foo / binïŒä»¥åã«ãã©ã«ããŒããªãã£ãå ŽåïŒããã³ãã¡ã€ã«/ foo / bin / helloãã·ã¹ãã ã«è¡šç€ºãããŸãã ã©ããã ã¢ã»ã³ããªäžã«ã³ãã³ãã©ã€ã³ã§æå®ãããPREFIX = / fooå€æ°ã¯ãMakefileã§æå®ãããPREFIX = / usr / localãåå®çŸ©ããŸããã ãã®çµæãMakefileã§æå®ãããmkdir -pããã³ã€ã³ã¹ããŒã«ã³ãã³ãã¯æ¬¡ã®ããã«ãªããŸããã
mkdir -p /foo/bin install hello /foo/bin/
ãã®çµæããã€ããªã¯/ foo / binã«äŸåããŠããŸããã
ããã§ããã¬ãã£ãã¯ã¹ã«ã€ããŠããå°ã説æããŸãã ã©ããªãã¬ãã£ãã¯ã¹ããããŸããïŒ
ãã¬ãã£ãã¯ã¹ã ãããéžæããå¿ èŠãããããšã¯ãŸããããŸããã OSã®ããŒãã®åæ段éã«éèŠãªããã°ã©ã ã«äœ¿çšãããŸãïŒã€ãŸããããŒãã®éèŠãªèŠçŽ ã¯/ binã/ libãªã©ã«ãããŸãïŒïŒãã ããããã°ã©ã ã/ã«ã€ã³ã¹ããŒã«ããå¿ èŠãããå Žåã§ããæåã«/ã«ã€ã³ã¹ããŒã«ãããŸãïŒ usrãã€ãŸãã/ usrãã¬ãã£ãã¯ã¹ã䜿çšããŠã¢ã»ã³ãã«ããã³ã€ã³ã¹ããŒã«ãããå¿ èŠãªãã®ã/ã«ç§»åãããŸãïŒã€ãŸãã/ usr / binãã/ binã«ç§»åãããŸãïŒããããã«ããŠããLinux From Scratch 7.10ã®äœæè ã¯ãããè¡ããŸããããã±ãŒãžãbashãªã©ïŒã
ãã¬ãã£ãã¯ã¹/ usrã ããã±ãŒãžãããŒãžã£ãŒãéããŠã€ã³ã¹ããŒã«ãããããã°ã©ã ã«äžè¬çã«äœ¿çšãããæšæºãã¬ãã£ãã¯ã¹ã ã€ãŸããããã±ãŒãžãããŒãžã£ãŒã䜿çšããŠããã°ã©ã ãã€ã³ã¹ããŒã«ããå Žåã/ usrãã¬ãã£ãã¯ã¹ãä»ããŠã·ã¹ãã ã«ã³ã³ãã€ã«ããã³ã€ã³ã¹ããŒã«ããããã®ããã«åäœããŸãã / usrãã¬ãã£ãã¯ã¹ãä»ããããã±ãŒãžãèªåã§ã€ã³ã¹ããŒã«ããããšã¯ã§ããŸããã
ãã¬ãã£ãã¯ã¹/ usr / localã èªåã§ããã°ã©ã ãã€ã³ã¹ããŒã«ããããã®åªãããã¬ãã£ãã¯ã¹ã è¯ãããšã¯ã/ usr / local / binãããã©ã«ãã®PATHã«ããããšã§ãïŒå°ãªããšãdebianã§ã¯ïŒã ã€ãŸããããã°ã©ã ãã€ã³ã¹ããŒã«ããçŽåŸã«ãååã§ããã°ã©ã ãç°¡åã«å®è¡ã§ããŸãã ãã€ããªã¯/ usr / local / binã«ããã/ usr / local / binã¯PATHã«ããããã§ãã æªãããšã¯ããã¹ãŠã®ããã°ã©ã ãæ··åšããŠããããšã§ãã fooã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããŠãããbarã©ã€ãã©ãªãã€ã³ã¹ããŒã«ãããšããŸãã ãã®ãã¬ãã£ãã¯ã¹ã®äž¡æ¹ã ããªãŒã¯æ¬¡ã®ããã«ãªããŸãïŒå®å šã«ç°¡ç¥åããã圢åŒïŒã
/usr/local/include/foo.h /usr/local/include/bar.h /usr/local/lib/libfoo.so /usr/local/lib/libbar.so
ã»ã ãã¹ãŠãæ··åšããŠããŸãã ãfooã«é¢é£ãããã¹ãŠããå«ãåäžã®ãã©ã«ããŒãããbarã«é¢é£ãããã¹ãŠããå«ãä»ã®ãã©ã«ããŒã¯ãããŸããã ïŒããã¯ããªãã®ããžãã¹ã§ãããæ¬åœã«æªããã©ãããèæ ®ããŠãã ããïŒã åãåé¡ã1ã€ã®ãã¬ãã£ãã¯ã¹ã®ç°ãªãããã±ãŒãžã®ã€ã³ã¹ããŒã«ã§ååšããããšãæ確ã«ããŸãã ã€ãŸããæ¥é èŸ/ usrã«ã¯åãåé¡ããããŸããããã±ãŒãžã¯ã·ã¹ãã å šäœã«ãåºããããŸãïŒããã§ã¯ãããã±ãŒãžãããŒãžã£ãŒãä»ããŠé ä¿¡ãããããã±ãŒãžãã€ãŸãå®éã«ã·ã¹ãã ãæ§æããããã±ãŒãžã«ã€ããŠèª¬æããŠããŸãïŒã å®éãããã¯ã»ãšãã©ã®UNIXã©ã€ã¯ã·ã¹ãã ãšWindowsãšã®é¡èãªéãã®1ã€ã§ãã Windowsã§ã¯ãåããã°ã©ã ã¯Program Filesã®ç¬èªã®ãã©ã«ããŒã«ãããŸãã ã»ãšãã©ã®UNIXã©ã€ã¯ã·ã¹ãã ã§ã¯ãã·ã¹ãã å šäœã«ãåºããããŸãã ïŒ2017-02-09ããã®UPD ïŒWindowsã§ã¯ãã¬ãžã¹ããªã«ãã£ãŠå®éã«ããã°ã©ã ããã¹ãã¢ããããŸããããã¯ããã»ã©é¡èã§ã¯ãããŸãããïŒãã®åé¡ãã解決ãããGNU / Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ããããŸããããšãã°ãGoboLinuxã§ãã ããã§ã¯ãWindowsã®ããã«ãåããã±ãŒãžãç¬èªã®ãã£ã¬ã¯ããªã«ãããŸãã
/ opt / XXXã®åœ¢åŒã®ãã¬ãã£ãã¯ã¹ã / optãã©ã«ããŒã¯æ¬¡ã®ããã«äœ¿çšããããšã«ãªã£ãŠããŸãããµããã£ã¬ã¯ããªãäœæããããã±ãŒãžåãåŒã³åºããŠããããã®ãµããã£ã¬ã¯ããªããã¬ãã£ãã¯ã¹ãšããŠäœ¿çšããå¿ èŠããããŸãã ãã®ã¢ãããŒãã䜿çšãããšãäžèšã®åé¡/ usr / localïŒåé¡ãšæãããå ŽåïŒã¯ãªããªããŸãã åããã±ãŒãžã¯ãç¬èªã®ãã£ã¬ã¯ããªã«ã€ã³ã¹ããŒã«ãããŸãã fooãšbarã䜿çšããäžèšã®äŸã¯æ¬¡ã®ããã«ãªããŸãïŒ/ optã®ãµããã£ã¬ã¯ããªã®ååã«ããŒãžã§ã³çªå·ãæå®ããããšããå§ãããŸãïŒã
/opt/foo-1.0/include/foo.h /opt/foo-1.0/lib/libfoo.so /opt/bar-2.0/include/bar.h /opt/bar-2.0/lib/libbar.so
ãã®ãœãªã¥ãŒã·ã§ã³ã«ãæ¬ ç¹ããããŸãã ãããã®ç¡æ°ã®/opt/foo-1.0/binãã£ã¬ã¯ããªãïŒããã±ãŒãžããšã«ïŒPATHã«èªåã§è¿œå ããå¿ èŠããããŸãã
ããŒã ãã£ã¬ã¯ããªã«äžèŽãããã¬ãã£ãã¯ã¹ã ã€ãŸãã/ home / userãªã©ã§ãã ãèªåã ãããã€ãŸã1人ã®ãŠãŒã¶ãŒã®ã¿ã眮ãããå Žåã«ã¢ããã€ã¹ããŸãã ãŸãã¯ãã«ãŒãæš©éããªãå Žåã ãããããOSã«ä»å±ããèšå®ã¯ãã/ binãPATHã«é 眮ããããã«æ¢ã«æ§æãããŠããŸãïŒãã®ãããªãã£ã¬ã¯ããªãååšããå ŽåïŒã ãããã£ãŠãPATHã¯å¿ èŠã«å¿ããŠæ§æãããŸãã
åãã¬ãã£ãã¯ã¹ã«ã¯ãç¬èªã®binãsbinãlibãincludeãªã©ãå«ããããšãã§ããŸãã
ããã§ãäœããéžæããã®ã§ããïŒ ã·ã¹ãã å šäœã«ã€ã³ã¹ããŒã«ããå¿ èŠãããå Žåã¯ã/ opt / XXXããå§ãããŸãã ç§ã¯éåžžããã®ããã«çœ®ããŸãã
次ã«ãã¢ã»ã³ããªãã©ã€ãã©ãªã®ã€ã³ã¹ããŒã«ãããã³ãã®äœ¿çšã«ã€ããŠèª¬æããŸãã ã©ã€ãã©ãªã¯ãä»ã®ããã±ãŒãžãšåãæ¹æ³ã§ã¢ã»ã³ãã«ããã³ã€ã³ã¹ããŒã«ãããŸããããã«ã€ããŠã¯ããã§ã«äžèšã§èª¬æããŸããã ããã§ã¯ãããã«äœ¿çšã«ç§»ããŸãããã ãã®ãããã©ã€ãã©ãªãç¹å®ã®æ¥é èŸãããšãã°/ fooã«ã€ã³ã¹ããŒã«ããŸããã çŸåšããã®ã©ã€ãã©ãªã®ããããŒã¯/ foo / includeã«ãããã©ã€ãã©ãªã®ãã€ããªã¯/ foo / libã«ãããŸãïŒ.soã¯åçã©ã€ãã©ãªããŸãã¯.aã¯éçããŸãã¯äž¡æ¹ïŒã
ãã®ã©ã€ãã©ãªã§acãã¡ã€ã«ãåéããå¿ èŠããããšããŸãããã ã©ããã£ãŠããã®ïŒ
ãŸãããã¡ã€ã«ã®å é ã«ãæ¥ç¶ãããããããŒã«å¯Ÿå¿ãã#includeãèšè¿°ããå¿ èŠããããŸãã ããŠã次ã®ããã«åéããå¿ èŠããããŸãã
cc -c -I/foo/include ac cc -L/foo/lib -oa ao -lfoo
æ£ããããŸãããã ãŸããIïŒå€§ããªè±èªaïŒãšlïŒå°ããªè±èªãšãŒã«ïŒã¯2ã€ã®ç°ãªãæåã§ãããšèšããŸãã äžèšã®ã³ãã³ãã§ããããæ··åããªãã§ãã ããã
æåã®ã³ãã³ãã¯ã³ã³ãã€ã«ãã€ãŸãacã«åºã¥ããŠaoãäœæããŸã2çªç®ã®ã³ãã³ã-ãªã³ã¯ãã€ãŸãaoã«åºã¥ããæçµãã€ããª
æåã®ã³ãã³ãã§ã¯ã-I / foo / includeãæå®ããŸããã ããã¯ãããããŒãæ€çŽ¢ãããã©ã«ããŒã瀺ããŠããŸãã ãã®ãªãã·ã§ã³ããã®ãã¹ã¯ãïŒincludeã§æå®ããããã¡ã€ã«ã«æ¥ç¶ããŸãã ã€ãŸããã³ãã³ãã©ã€ã³ã§-I / foo / includeãæå®ããããã¡ã€ã«ã«#include <foo.h>ãæžã蟌ãŸããŠããå Žåã/ foo / include / foo.hãååŸãããéã¢ã¯ãã£ãã«ãªããŸãã
ããã§ã-I / foo / includeãªãã·ã§ã³ã¯ãããèªäœãå«ããŸããã æ€çŽ¢ãããã©ã«ããŒã®ã¿ã瀺ããŠãããããïŒincludeãå¿ èŠã§ãã ã€ãŸãã-I / foo / includeãš#includeãå¿ èŠã§ãããã®ãã¡ã®1ã€ã§ã¯äžååã§ãã
ãªã³ã¯ã -L / foo / libã¯ããã€ããªã©ã€ãã©ãªãã¡ã€ã«ãã€ãŸã.soããã³.aãã¡ã€ã«ãæ€çŽ¢ãããã©ã«ããŒã瀺ããŸãã -lfooã¯ããã®ã©ã€ãã©ãªãçµæã®ãã€ããªã«å®éã«ãªã³ã¯ããå¿ èŠãããããšã瀺ããŠããŸãã -lfooãªãã·ã§ã³ã§æå®ãããã©ã€ãã©ãªåã¯ã-L / foo / libã§æå®ããããã©ã«ããŒã«æ¥ç¶ããget / foo / lib / libfooïŒãlibããšããåèªããã¡ã€ã«åã®å é ã«æ¿å ¥ãããŸãïŒã. soïŒãŸãã¯.a ïŒãªãã·ã§ã³ã§ãããŒãžã§ã³çªå·ã¯/foo/lib/libfoo.soãŸãã¯/foo/lib/libfoo.so.1ã«ãªããŸãã ããã¯ãæ€çŽ¢ãã.soãã¡ã€ã«ã®ååã«ãªããŸãã
ã³ã³ãã€ã«ïŒacã®aoïŒãšåæ§ã«ã-L / foo / libãš-lfooã®äž¡æ¹ãå¿ èŠã§ãã -L / foo / libã¯ã©ããèŠããã瀺ããŸãã -lfooã¯æçµçãªãªã³ã¯ã³ãã³ããæäŸããŸãã
-lfooã®ä»£ããã«ããªã³ã¯ããã©ã€ãã©ãªãã¡ã€ã«ãžã®ãã¹å šäœãçŽæ¥æžã蟌ãããšãã§ããŸãïŒäŸïŒ/foo/lib/libfoo.so.1ïŒã ãã®å Žåã-L / foo / libãªãã·ã§ã³ã¯äžèŠã§ãã 次ã®ããã«ãªããŸãã
cc -oa ao /foo/lib/libfoo.so.1
ã©ã€ãã©ãªïŒã©ã€ãã©ãªãžã®ãã«ãã¹ãŸãã¯-lfooã¿ã€ãã®ãªãã·ã§ã³ïŒã¯ããyourããªããžã§ã¯ããã¡ã€ã«ã®åŸã«æå®ããå¿ èŠããããŸãããã®å Žåã¯aoã§ãïŒãã¶ãããã§ã¯ãããŸãããã念ã®ããããããè¡ãæ¹ãè¯ãã§ãããïŒã
2ã€ã®ããŒã ã1ã€ã«ãŸãšãããšã次ã®ããã«ãªããŸãã
cc -I/foo/include -L/foo/lib -oa ac -lfoo
ã©ã€ãã©ãªã/ usrãã¬ãã£ãã¯ã¹ã§ã€ã³ã¹ããŒã«ãããŠããå ŽåïŒã€ãŸããããã±ãŒãžãããŒãžã£ãä»ããŠåã«ã€ã³ã¹ããŒã«ãããŠããå ŽåïŒã-Iããã³-Lãªãã·ã§ã³ã¯äžèŠã§ãã-I/ usr / includeããã³-L / usr / libãããããšãèæ ®ããŠãã ãããã§ã«æã£ãŠããŸãã åãããšã/ usr / localã«ãåœãŠã¯ãŸãå ŽåããããŸãã
foo, libfoo ( libfoo1, libfoo2) libfoo-dev. libfoo .so, libfoo-dev â . . .
libfoo libfoo-dev, foo /usr. , , :
/usr/include/foo.h ( libfoo-dev) /usr/lib/libfoo.so.1 ( libfoo)
, , ,
dpkg -L libfoo
.
dpkg -S /usr/include/foo.h
.