Makefile编译
这篇文章演示多目录,c,c++混编的Makefile写法。
文件夹:
$dir/bin/
$dir/deps/
deps/inc/
deps/lib/
deps/src/
$dir/obj/
$dir/project/
project/test.mk
$dir/src/
src/class1.cpp
src/class1.h
src/test.cpp
src/mydir/class2.cpp
src/mydir/class2.h
src/mydir/funs1.c
src/mydir/funs1.h
class1.h:
#ifndef __CLASS_1_h__
#define __CLASS_1_h__ class CTest1
{
public:
CTest1();
~CTest1(); int get_v1(); private:
int m_v1;
}; #endif
class1.cpp:
#include "class1.h"
CTest1::CTest1()
{
m_v1 = ;
}
CTest1::~CTest1()
{
}
int CTest1::get_v1()
{
return m_v1;
}
mydir/class2.h:
#ifndef __CLASS_2_h__
#define __CLASS_2_h__ class CTest2
{
public:
CTest2();
~CTest2(); int get_v1(); private:
int m_v1;
}; #endif
mydir/class2.cpp:
#include "class2.h"
CTest2::CTest2()
{
m_v1 = ;
}
CTest2::~CTest2()
{
}
int CTest2::get_v1()
{
return m_v1;
}
mydir/funs1.h:
#ifndef __FUNS1_H__
#define __FUNS1_H__ void print1(); #endif
mydir/funs1.c:
#include "funs1.h"
#include <stdio.h> void print1()
{
printf("this is print1\n");
}
test.cpp:
//#define __STDC_LIMIT_MACROS
#include <stdint.h>
#include <iostream>
#include "class1.h"
#include "mydir/class2.h" extern "C"
{
#include "mydir/funs1.h"
} int main()
{
CTest1 test1;
CTest2 test2;
int a = ;
int16_t b = ;
print1();
std::cout << "max int=" << INT32_MAX << std::endl;
std::cout << "test1.v1 = " << test1.get_v1() << std::endl;
return ;
}
test.mk:
CFLAGS = -g -Wall -I../src -I../src/mydir -D __STDC_LIMIT_MACROS
CC = gcc
GXX = g++
#VPATH = ../src ../src/mydir
SRCPATH = ../src
OBJPATH = ../obj
BINPATH = ../bin
PROGRAM = test.exe
OBJS= class1.o class2.o funs1.o test.o PROGRAMFULL = $(addprefix $(BINPATH)/, $(PROGRAM))
OBJSFULL = $(addprefix $(OBJPATH)/, $(OBJS)) .PHONY: all clean cleanobj show all: clean $(PROGRAMFULL) ${PROGRAMFULL} : ${OBJSFULL}
$(GXX) -o $@ $(OBJSFULL) ${OBJPATH}/%.o : ${SRCPATH}/mydir/%.c
$(CC) $(CFLAGS) -c $< -o $@ ${OBJPATH}/%.o : ${SRCPATH}/mydir/%.cpp
$(GXX) $(CFLAGS) -c $< -o $@ ${OBJPATH}/%.o : ${SRCPATH}/%.cpp
$(GXX) $(CFLAGS) -c $< -o $@ clean:
rm -f ${PROGRAMFULL} ${OBJSFULL} cleanobj:
rm -f ${OBJSFULL} show:
@echo 'PROGRAMFULL :' ${PROGRAMFULL}
@echo 'OBJSFULL :' $(OBJSFULL)
@echo 'CFLAGS :' $(CFLAGS)
Makefile编译的更多相关文章
- gcc与makefile编译 BY 四喜三顺
gcc编译控制过程:(假设源代码为a.c)(1)源文件到预处理文件: gcc -E -o a.cxx a.c a.cxx显示调用哪些头文件(2)生成汇编代码: g ...
- 【Linux学习】 写一个简单的Makefile编译源码获取当前系统时间
打算学习一下Linux,这两天先看了一下gcc的简单用法以及makefile的写法,今天是周末,天气闷热超市,早晨突然发现住处的冰箱可以用了,于是先出去吃了点东西,然后去超市买了一坨冰棍,老冰棍居多, ...
- Linux Makefile 编译速度的优化【转】
转自:https://blog.csdn.net/QQ1452008/article/details/51851801 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...
- live555学习(一)通读Makefile编译live555
live555学习(一)通读Makefile编译live555 live555 编译live555 学习开源 live555学习(一)通读Makefile编译live555 前言 live555简介 ...
- makefile 编译指定目录
makefile 编译指定目录 sub1=test1 sub2=test2 subs = sub1 sub2 SUBDIRS =$(foreach i, $(subs), $($(i))) .PHON ...
- C++---初识《通过g++ / makefile 编译和调用动态库so文件》(ubuntu)
C++---初识<通过g++ / makefile 编译和调用动态库so文件>(ubuntu) ------------------------目录------------------- ...
- CMake 工程调用 Makefile 编译项目
本文主要介绍如何将一个依赖 Makefile 项目(MIDG)移植到 CMake 上. 首先介绍项目文件结构,文件主要由三个目录组成 3rdParty include src 其中,3rdParty ...
- Makefile编译库
funs.h: #ifndef __FUNS_H__ #define __FUNS_H__ void fun1(); #endif funs.c #include "funs.h" ...
- windows下如何使用makefile编译
1. 编写makefile. 2. 使用nmake进行编译, vs2010或者其他都是用nmake进行编译的,将bin目录添加到path环境变量中 先执行vcvars32.bat 再执行nmake
- 一步一步写一个简单通用的makefile(四)--写一个通用的makefile编译android可执行文件
通常要把我们自己的的代码编译成在android里面编译的可执行文件,我们通常是建一个文件夹 . ├── Android.mk ├── Application.mk ├── convolve.cl ├─ ...
随机推荐
- Unity学习疑问记录之查找
unity中提供了获取对象的五种方法: 通过对象名称(Find方法) 通过标签获取单个游戏对象(FindWithTag方法) 通过标签获取多个游戏对象(FindGameObjectsWithTags方 ...
- Educational Codeforces Round 6 E dfs序+线段树
题意:给出一颗有根树的构造和一开始每个点的颜色 有两种操作 1 : 给定点的子树群体涂色 2 : 求给定点的子树中有多少种颜色 比较容易想到dfs序+线段树去做 dfs序是很久以前看的bilibili ...
- Raspberry pi 添加vnc远程桌面控制
// 安装服务 apt-get install tightvncserver // 设置连接密码 vncpasswd // 在端口1处开启服务 tightvncserver :1
- Qt在pro文件中加入带空格的路径(使用$$quote关键字)
LIBS += -L$$quote(C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib) INCLUDEPATH += $$quote(C: ...
- ORM系列之二:EF(3) 数据库连接
目录 1.前言 2.Code First默认连接 3.Code First指定数据库 4.自定义连接 前言 在介绍EF的Code First模式时候,我们没有修改任何配置,运行之后自动在LocalDb ...
- c语言文法简化版文法
<源程序>→<外部声明>|<外部声明><函数体> <外部申明>→<头文件><函数声明>|其他声明 <函数体&g ...
- C#测试运行时间
System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); watch.Start(); //开始监视代码运行时间 ...
- pixelmator处理png图片,处理掉过白的留白。
作为一个CTO,还是得学会一些普通的修图技术的.这不,刚学会在pixelmator下如何处理png中过多的留白. 汗,其实就是一个菜单选项而已./image/trim canvas 效果如下:
- java设计模式之工厂方法探究
简单工厂 + 工厂方法 + 抽象工厂 看了十几篇博客,每篇基本上都能有个自己的解释,我汇总这些内容,重新梳理整理了一番,以形成自己的理解. 简单工厂模式其实不算23种设计模式之 ...
- LeetCode Find All Numbers Disappeared in an Array
原题链接在这里:https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/ 题目: Given an array o ...