我们编译Linux应用程序一般使用Makefile,其规则不需要全部掌握,只需要掌握几点就够用了。重点是编译参数填好。
#源文件,自动找所有.c和.cpp文件,并将目标定义为同名.o文件,不需要修改
SOURCE := $(wildcard *.c) $(wildcard *.cpp)
OBJS := $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE)))
#目标文件名,可修改为任意你想要的执行文件名
TARGET := test
#编译参数
CC := gcc
LIBS = -lpthread -l*
##库文件的目录
LDFLAGS := -L. lib
##头文件的目录
CFLAGS := -I. dir
CXXFLAGS:= $(CFLAGS) -DHAVE_CONFIG_H
#下面的基本上不需要做任何改动了
.PHONY : everything objs clean veryclean rebuild
everything : $(TARGET)
all : $(TARGET)
objs : $(OBJS)
rebuild: veryclean everything
clean :
rm -fr *.so
rm -fr *.o
veryclean : clean
rm -fr $(TARGET)
$(TARGET) : $(OBJS)
$(CC) $(CXXFLAGS) -o $@ $(OBJS) $(LDFLAGS) $(LIBS)
如果是单个文件的话,直接命令行gcc就可以了。比如:
gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lword
-I /home/hello/include表示寻找头文件的目录,寻找的顺序是:/home/hello/include–>/usr/include–>/usr/local/include
-L /home/hello/lib表示寻找库文件的目录,寻找的顺序是:/home/hello/lib–>/lib–>/usr/lib–>/usr/local/lib
-lworld表示在上面的lib的路径中寻找libworld.so动态库文件(如果gcc编译选项中加入了"-static"表示寻找libworld.a静态库文件)
如果有些编译器环境没有设置,还需要添加
--sysroot=/opt/sysroots/aarch64-poky-linux(填上编译器安装地址就OK了)