рддреЛ рдлрд┐рд░ рднреА, рдЖрдкрдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?



рдпрд╣ рд╕рдм рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛, рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░рд╢реНрди рдХреЗ рд╕рд╛рде рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реНрддреВрдк рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ - "рдореБрдЭреЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдореБрдЭреЗ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдХреНрдпреЛрдВ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ?"ред рдФрд░ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? (рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг) рд╡рд╣ рдХрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИ?


рдлрд┐рд░ рдореИрдВрдиреЗ рдереЛрдбрд╝рд╛ рд╕реЛрдЪрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ - рдЕрдЧрд░ рд╣рдо рдирд╣реАрдВ рдмрдирд╛рддреЗ рддреЛ рд╣рдо рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реНрд░реЛрдд рдХреЛрдб рд╡рд╛рд▓реА рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред рдЙрдирд╕реЗ рдЖрдкрдХреЛ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ (рдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдХрд╛рд░реНрдп рд╕рд░рд▓ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЖрдЧреЗ рдмрдврд╝ рдЧрдПред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИред



рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдПрдХ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ:


$ gcc main.c -o main 

рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рдерд╛ред рд▓реЗрдХрд┐рди рдХреБрдЫ рд╕рдордп рдмреАрдд рдЬрд╛рддрд╛ рд╣реИ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддреА рд╣реИ, рдХреБрдЫ рдореЙрдбреНрдпреВрд▓ рдЗрд╕рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрд░реЛрдд рдлрд╛рдЗрд▓реЗрдВ рдмрдбрд╝реА рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред



рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:


 $ gcc -c src0.c $ gcc -c src1.c $ gcc -c main.c $ gcc -o main main.o src0.o src1.o 

рд╕рд╣рдордд, рдпрд╣ рдПрдХ рд▓рдВрдмреА рдФрд░ рд╢реНрд░рдорд╕рд╛рдзреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рдРрд╕рд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ build.sh рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдХрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпреЗ рдХрдорд╛рдВрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдареАрдХ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ:


 $ ./build.sh 

рд╣рдордиреЗ рдЪрд▓рд╛рдИ! рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдврд╝ рд░рд╣реА рд╣реИ, рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝ рд░рд╣реА рд╣реИ рдФрд░ рдЙрдирдореЗрдВ рднреА рдЕрдзрд┐рдХ рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред рд╣рдо рдзреНрдпрд╛рди рджреЗрдиреЗ рд▓рдЧреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдХрд▓рди рдХрд╛ рд╕рдордп рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдк рд╕реЗ рдмрдврд╝ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рджреЛрд╖ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ - рдпрд╣ рд╣рдорд╛рд░реА рд╕рднреА 50 рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдордиреЗ рдХреЗрд╡рд▓ рдПрдХ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИред



рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛! рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рд╕рдордп рдмрд╣реБрдд рдореВрд▓реНрдпрд╡рд╛рди рд╣реИред рдареАрдХ рд╣реИ, рд╣рдо рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╕рдВрдХрд▓рди рд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рд╕реНрд░реЛрдд рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рдВрд╢реЛрдзрди рдХреЗ рд╕рдордп рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред рдФрд░ рдХреЗрд╡рд▓ рдЙрди рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:


 #!/bin/bash function modification_time { date -r "$1" '+%s' } function check_time { local name=$1 [ ! -e "$name.o" ] && return $? [ "$(modification_time "$name.c")" -gt "$(modification_time "$name.o")" ] && return $? } check_time src0 && gcc -c src0.c check_time src1 && gcc -c src1.c check_time main && gcc -c main.c gcc -o main main.o src0.o src1.o 

рдФрд░ рдЕрдм рдХреЗрд╡рд▓ рдЙрди рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ:



рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ, рдПрдХ рдкрд▓ рдЖрдПрдЧрд╛ рдЬрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ рдФрд░ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд▓рд┐рдкрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдПрдХ рд╢реНрд░рдорд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрди рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдпрд╣ рдПрдХ рддрдереНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реЛрдЧреАред


рдмреЗрд╢рдХ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рдирд┐рдХрд▓рддрд╛ рд╣реИред рдПрдХ рдЙрдкрдХрд░рдг рдЬреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рдФрд░ рдпрд╣рд╛рдБ рд╣рдо рдзреАрд░реЗ-рдзреАрд░реЗ рдмрдирд╛рдиреЗ рдХреЗ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╣реЛ рд░рд╣реЗ рд╣реИрдВ ред рдФрд░ рдЕрдм, рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣рдореЗрдВ рдХрд┐рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛, рдЕрдВрдд рдореЗрдВ рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:


  • рдирд┐рд░реНрднрд░рддрд╛ рдФрд░ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
  • рд╡реНрдпреБрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рдХреА рдиреНрдпреВрдирддрдо рд░рд╛рд╢рд┐
  • (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, + рдХрдорд╛рдВрдб рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди)

makefile


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдирд┐рдпрдореЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдХрдлрд╛рдЗрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдореЗрдХрдлрд╛рдЗрд▓ рдмрдирд╛рдирд╛, рд╣рдо рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рд░рд╛рдЬреНрдп рдирд┐рд░реНрдзрд╛рд░рдг рдХреА рдШреЛрд╖рдгрд╛рддреНрдордХ рдкреНрд░рдХреГрддрд┐ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХрд┐ рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ рдФрд░ рд╣рдореЗрдВ рдЖрджреЗрд╢реЛрдВ рдХреА рд╕реВрдЪреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдЙрдирд╕реЗ рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреБрдЫ рдЕрдирд┐рд╡рд╛рд░реНрдп рднрд╛рд╖рд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реЗрд▓) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреЗрдХ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ, рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЬрдЯрд┐рд▓ рдФрд░ рднреНрд░рдорд┐рдд рдХреЛрдб рдорд┐рд▓реЗрдЧрд╛, рдЬрдмрдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╣реИред рдореБрдЦреНрдп рдмрд╛рдд рд╕рд╣реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдкреЗрдбрд╝ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реИред


 <  > : <  ... > <  > ... ... 

рдореИрдВ рдХреИрд╕реЗ Makefiles рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореИрдиреБрдЕрд▓ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рд▓реЛрдЧ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдореЗрдХрдлрд╛рдЗрд▓реНрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдФрд░ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ Makefiles рдмрд┐рд▓реНрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реНрд░реЛрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/hi477656/


All Articles