- 命令
- g++ -c
- 编译但不链接
- 生成的文件.o
- 自动生成filename.o
- g++ -o
- 生成可执行文件(编译+链接)
- 生成可执行文件(.out,若不指明生成文件,则自动生成a.out),同时会执行得到结果
- g++ main.o message.o -o output
- g++ main.cpp message.cpp -o output
- g++ -c
- makefile
-
target: dependencies // 表示目标文件,以及生成目标文件的依赖 aciton // 生成目标文件的命令
这里是主体,后面不管是宏定义还是头文件、库文件其实都是要加到命令(action)里面的
-
output: main.o message.o g++ main.o message.o -o output // 编译后的文件链接得到最终可执行文件 main.o main.cpp g++ -c main.cpp message.o message.cpp message.h g++ -c message.cpp // 生成编译后的文件 cleanup rm *.o output
- 创建makefile,然后编辑makefile,在makefile相同的目录下面用make命令执行c++程序
- make一次之后make会提示output已存在,需要make clean之后make(没有修改代码的情况下会这样,若做了修改系统会检测到并且make成功)
- makefile的作用:
- 表示依赖关系
- 将命令写到一起,方便执行
- makefile中添加第三方库和头文件的方法
- 插入第三方库和头文件
- 需要宏将第三方库和文件写进去,然后在命令中加上这两个宏,或者直接加在命令后面也可以
- -L lib库的路径 -l 具体依赖的lib库
- -I 头文件的路径
- makefile中的.h文件
- 添加到依赖中,不用写在命令里面
- makefile中的32位和64位
- 32位:-m32
- 64位:-m64
- makefile中的debug和release版本
- makefile中的格式
- #开头为注释
- 必须加tab
- makefile中宏定义
- makefile中的宏定义
- 宏实际上就是定义一个变量(别名),然后在makefile或者代码中会用到这个变量
- 宏在makefile的使用方法
- ifeq判断宏的大小,然后进行根据宏的大小进行不同的动作
-
ifeq ($(RELEASE),0) # debug CFLAGS += -g else # release CFLAGS += -static -O3 -DNDEBUG LFLAGS += -static endif
-
- 用$(宏)在makefile中使用这个宏
- ifeq判断宏的大小,然后进行根据宏的大小进行不同的动作
- 宏在代码中的使用方法
-
#include <iostream> using namespace std; int main(int argc, char* argv[]) { #ifdef _DEBUG cout << "using debug..." << endl; #endif cout << "stop..." << endl; }
详情见宏在代码中的使用
-
-
宏定义
-
vs ---- 项目 ---- 属性 ------ c/c++ ----- 预处理器 ---- 预处理器定义
-
-
-
makefile的一个实例
-
详情见奋斗-少年的博客
-
CROSS = //在开发时候,有时候会有嵌入式的选项 CC = $(CROSS)gcc CXX = $(CROSS)g++ DEBUG = -g -O2 //这里一般设置为空,在编译时候手动指定,例如:make DEBUG="-g -O2",如果使用release版本就不用这个 CFLAGS = $(DEBUG) -Wall -c RM = rm -rf SRCS = add.cpp sub.cpp mul.cpp main.cpp //最笨的方法,将所有的.cpp文件添加到SRCS中 OBJS = $(patsubst %.cpp, %.o, $(SRCS)) //通过*.cpp文件获得同名的*.o文件 VERSION = 1.0.0.0 //版本信息,这里的版本信息只是用来加在生成可执行文件的后面 TARGET = test.$(VERSION) //组装文件名和版本信息 $(TARGET) : $(OBJS) //连接 $(CXX) $^ -o $@ $(OBJS):%.o : %.cpp //生成*.o文件 $(CXX) $(CFLAGS) $< -o $@ clean: $(RM) $(TARGET) *.o
-
相关链接:1