單一程序
准備一個hello.c
#include <stdio.h>
int main(void)
{
printf("Hello World!\n");
}
gcc hello.c
,執行文件名被自動設置成a.out,可用./a.out
直接執行,因為這是編譯成功的可執行二進制程序
gcc -c hello.c
產生目標文件hello.o
gcc -o hello hello.o
利用目標文件制作一個名為hello的執行文件
主、子程序鏈接
准備一個主程序thanks.c,一個子程序thanks_2.c
//thanks.c
#include <stdio.h>
int main(void)
{
printf("Hello World\n");
thanks_2();
}
//thanks_2.c
#include <stdio.h>
void thanks_2(void)
{
printf("Thank you!\n");
}
進行編譯與鏈接
gcc -c thanks.c thanks_2.c
制作出兩個.o
文件
gcc -o thank thanks.o thanks_2.o
產生thanks可執行程序
如果以后更新了thanks_2.c文件,只需要重新編譯來產生新的thanks_2.o,然后再鏈接制作出最后的程序即可,不用再編譯thanks.c
調用外部函數庫
//sin.c
#include <stdio.h>
#include <math.h>
int main(void)
{
float value;
value = sin (3.14 / 2);
printf("%f\n", value);
}
數學函數庫使用的是libm.so這個函數庫,最好在編譯的時候將它包含進去
gcc sin.c -lm -L/lib -L/lib64
-l: 是加入某個函數庫的意思
m: 是libm.so這個函數庫
由於Linux默認將函數庫放置在lib和lib64中,所以不寫也沒關系
用make進行宏編譯
准備4個文件main.c
, haha.c
, sin_value.c
, cos_value.c
//main.c
#include <stdio.h>
#define pi 3.14159
char name[15];
float angle;
int main(void)
{
printf ("\n\nPlease input your name: ");
scanf ("%s", &name );
printf ("\nPlease enter the degree angle (ex> 90): " );
scanf ("%f", &angle );
haha( name );
sin_value( angle );
cos_value( angle );
}
//haha.c
#include <stdio.h>
int haha(char name[15])
{
printf ("\n\nHi, Dear %s, nice to meet you.", name);
}
//sin_value.c
#include <stdio.h>
#include <math.h>
#define pi 3.14159
float angle;
void sin_value(void)
{
float value;
value = sin ( angle / 180. * pi );
printf ("\nThe Sin is: %5.2f\n",value);
}
//cos_value.c
#include <stdio.h>
#include <math.h>
#define pi 3.14159
float angle;
void cos_value(void)
{
float value;
value = cos ( angle / 180. * pi );
printf ("The Cos is: %5.2f\n",value);
}
正常的步驟
gcc -c main.c haha.c sin_value.c cos_value.c
gcc -o main main.o haha.o sin_value.o cos_value.o -lm
./main
使用make
先准備一個makefile文件
$vim makefile
main: main.o haha.o sin_value.o cos_value.o
gcc -o main main.o haha.o sin_value.o cos_value.o -lm
$make
$make 再一次
make比shell腳本好在:它能主動判斷哪一個源代碼有修改過,並僅更新該文件
makefile的基本語法和變量
target: target_file1 target_file2 ...
<tab> gcc -o exe_file_name target_file1 target_file2 ...
- makefile中#代表注釋
- <tab>需要在命令行的第一個字符
- target與其依賴文件之間要用
:
分隔
如果想擁有兩個以上的操作時,可如此制作makefile文件
main: main.o haha.o sin_value.o cos_value.o
gcc main main.o haha.o sin_value.o cos_value.o -lm
clean:
rm -fv main main.o haha.o sin_value.o cos_value.o
test:
$make clean
$make main
再改進一下:
LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
main: ${OBJS}
gcc -o main ${OBJS} ${LIBS}
clean:
rm -fv main ${OBJS}
變量的基本語法:
- 變量與變量內容以
=
分隔,兩邊允許空格 - 變量左邊不可以有
tab
,:
- 變量應該大寫
- 使用方式,以
${變量}
的形式