Linux 多个cpp文件的编译(Makefile)

打包so文件:

CC = g++

CFLAGS=-Wall -O2 -fPIC

TARGET = libbg.so

SRCS := $(wildcard *.cpp)

OBJS := $(patsubst %cpp, %o, $(SRCS))

all: $(TARGET)

$(TARGET): $(OBJS)

$(CC) $(CFLAGS) -shared -o [email protected] $^

%.o:%.cpp

$(CC) $(CFLAGS) -c $<

clean:

rm -f *.o $(TARGET)

普通编译:

CC = g++

CFLAGS=-Wall -O2

TARGET = main

SRCS := $(wildcard *.cpp)

OBJS := $(patsubst %cpp, %o, $(SRCS))

all: $(TARGET)

$(TARGET): $(OBJS)

$(CC) $(CFLAGS) -o [email protected] $^

%.o:%.cpp

$(CC) $(CFLAGS) -c $<

clean:

rm -f *.o $(TARGET)

其中

[email protected]  表示目标文件

$^ 表示所有依赖项

$< 表示第一个文件

SRCS := $(wildcard *.cpp) 表示获取当前目录下的c文件集,放在变量SRCS中

OBJS := $(patsubst %cpp, %o, $(SRCS)) 表示将对应的c文件名转为o文件后放在下面的OBJS变量中

原文地址:https://www.cnblogs.com/sssblog/p/9701091.html

时间: 2024-07-29 23:53:25

Linux 多个cpp文件的编译(Makefile)的相关文章

Linux工程下所有C代码编译Makefile模板

如何快速的开发简易C程序,首先需要一个Makefile模板. 简易Makefile特性 这个模板需要具备以下特性: ==>快速编译所有C代码 ==>能够快速打包源代码 ==>语言简洁易懂,便于后续的模块化操作 这里提供一个这样的模板供大家参考使用,如有改进方法和建议,也请不吝赐教,以便完善,谢谢! 简易Makefile模板 废话不说,使用<Linux下C/C++版本发布自动脚本>集成DEMO的三个文件进行简单的示例(version.c/main.c/version.h). M

一个工程中cpp文件的编译顺序

做了一个实验. 最后build失败,失败的原因是变量i被重定义了.原本按照我的思路,是不应该失败的.因为我用了条件编译,若先编译Source.cpp,则会#define __HEADER_H__并且定义变量i,等到之后再编译main.cpp时,由于已经定义__HEADER_H__,就会跳过变量i的定义.最终i只被定义一次,完美. 不管怎么说,编译器是不会出错的,仔细寻找一下原因吧.根据上面的实验结果可以推测出,两个cpp文件中#ifndef 和 #endif之间语句都得到了执行. 将上面的代码稍

Linux下运行.cpp文件

如何在Ubuntu16下运行一个简单的.cpp文件呢,做法如下: 假设我在桌面上写了一个hell,world程序; 保存为abc.cpp 然后在终端打开: 1.点击保存的文件的属性,看在哪里,我的是在桌面上,打开终端后输入: cd /home/xiejiang/桌面 2.进入了桌面: 3.输入: 第一行命令输完了会在桌面上生成一个名为abc的文件,则用./abc即可执行

[转]c++应用程序文件的编译过程

原文地址 这里讲下C++文件的编译过程及其中模板的编译过程: 一:一般的C++应用程序的编译过程.    一般说来,C++应用程序的编译过程分为三个阶段.模板也是一样的. 在cpp文件中展开include文件. 将每个cpp文件编译为一个对应的obj文件. 连接obj文件成为一个exe文件(或者其它的库文件). 下面分别描述这几个阶段.1.include文件的展开.    include文件的展开是一个很简单的过程,只是将include文件包含的代码拷贝到包含该文件的cpp文件(或者其它头文件)

一个简单的makefile,一次性编译本文件夹下所有的cpp文件

代码: CXX := g++ CFLAGS := -gTARGET := xxx.exeSRCS := $(wildcard *.cpp)OBJS := $(patsubst %cpp,%o,$(SRCS))all:$(TARGET)%.o:%.cpp    $(CXX) $(CFLAGS) -c $<$(TARGET):$(OBJS)    $(CXX) $(CFLAGS) -o [email protected] $^clean:    rm -rf $(TARGET) *.o 操作: ma

Linux下多个.c文件的编译和Makefile文件

在编程的时候,我们可以把一个完整程序的每个函数分离出来,写成.c文件,最后再一起编译和链接.这样有利于程序功能模块化,也方便检查代码错误. .h文件:里面编辑该程序需要引用的头文件. #ifndef  /#define / #endif : 防止该头文件被重复引用. 整体用法: #ifndef  A_H             //如果没有a.h文件,#define A_H.如果有,结束定义 #define  A_H            //定义a.h文件 定义a.h需要的头文件 #endif

Linux C编程学习4---多文件项目管理、Makefile、一个通用的Makefile

GNU Make简介 大型项目的开发过程中,往往会划分出若干个功能模块,这样可以保证软件的易维护性. 作为项目的组成部分,各个模块不可避免的存在各种联系,如果其中某个模块发生改动,那么其他的模块需要相应的更新.如果通过手动去完成这个工作的话,对于小型的项目可能还行,但是对于比较大型的项目就几乎是不可能的. 因此Linux 系统提供了一个自动维护和生成目标程序的工具 make,它可以根据各个模块的更改情况去重新编译连接目标代码 Make 工具的作用就是实现编译连接过程的自动化.它定义了一种语言,用

Makefile一个cpp文件依赖于多个header文件的陷阱

我一直以为,如果一个A.cpp文件中有多少条 #include "xxx.h"指令,在写Makefile的时候A.obj的依赖项除了A.cpp之外,就是A.cpp之内所有的 xxx.h 比如,如果A.cpp中有 #include "A.h" #include "B.h" #include "C.h",那么在Makefile中就有:A.obj: A.cpp A.h B.h C.h 但是 下面的例子是说明了,上面的想法是错误的 先

linux 下C语言编程库文件处理与Makefile编写

做开发快3年了,在linux下编译安装软件算是家常便饭了.就拿gcc来说,都有不下10次了,可基本每次都会碰到些奇奇怪怪的问题.看来还是像vs.codeblocks这样的ide把人弄蠢了.便下定决心一定要好好学习下如何在linux下纯手工gcc编译c项目.今天学了2点,一个是库文件处理,另一个是makefile编写. 学习的系统是centos6.6,编译升级的gcc4.8.2,明天写个博客总结下这回gcc安装的过程,每次都能学到些东西. gcc的编译过程 首先需要清楚gcc编译做了些什么 源文件