这篇文章演示多目录,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编译的更多相关文章

  1. gcc与makefile编译 BY 四喜三顺

    gcc编译控制过程:(假设源代码为a.c)(1)源文件到预处理文件:    gcc -E -o a.cxx a.c    a.cxx显示调用哪些头文件(2)生成汇编代码:              g ...

  2. 【Linux学习】 写一个简单的Makefile编译源码获取当前系统时间

    打算学习一下Linux,这两天先看了一下gcc的简单用法以及makefile的写法,今天是周末,天气闷热超市,早晨突然发现住处的冰箱可以用了,于是先出去吃了点东西,然后去超市买了一坨冰棍,老冰棍居多, ...

  3. Linux Makefile 编译速度的优化【转】

    转自:https://blog.csdn.net/QQ1452008/article/details/51851801 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...

  4. live555学习(一)通读Makefile编译live555

    live555学习(一)通读Makefile编译live555 live555 编译live555 学习开源 live555学习(一)通读Makefile编译live555 前言 live555简介 ...

  5. makefile 编译指定目录

    makefile 编译指定目录 sub1=test1 sub2=test2 subs = sub1 sub2 SUBDIRS =$(foreach i, $(subs), $($(i))) .PHON ...

  6. C++---初识《通过g++ / makefile 编译和调用动态库so文件》(ubuntu)

    C++---初识<通过g++ / makefile  编译和调用动态库so文件>(ubuntu) ------------------------目录------------------- ...

  7. CMake 工程调用 Makefile 编译项目

    本文主要介绍如何将一个依赖 Makefile 项目(MIDG)移植到 CMake 上. 首先介绍项目文件结构,文件主要由三个目录组成 3rdParty include src 其中,3rdParty ...

  8. Makefile编译库

    funs.h: #ifndef __FUNS_H__ #define __FUNS_H__ void fun1(); #endif funs.c #include "funs.h" ...

  9. windows下如何使用makefile编译

    1. 编写makefile. 2. 使用nmake进行编译, vs2010或者其他都是用nmake进行编译的,将bin目录添加到path环境变量中 先执行vcvars32.bat 再执行nmake

  10. 一步一步写一个简单通用的makefile(四)--写一个通用的makefile编译android可执行文件

    通常要把我们自己的的代码编译成在android里面编译的可执行文件,我们通常是建一个文件夹 . ├── Android.mk ├── Application.mk ├── convolve.cl ├─ ...

随机推荐

  1. 20145205《Java程序设计》第四次实验:Android环境搭建

    实验内容 1.搭建Android环境 2.运行Android 3.修改代码,能输出学号 实验步骤 搭建Android环境 安装Android,核心是配置JDK.SDK 运行Android 总结感想: ...

  2. andriod逆向实验截图

  3. 从一个NOI题目再学习二分查找。

    二分法的基本思路是对一个有序序列(递增递减都可以)查找时,测试一个中间下标处的值,若值比期待值小,则在更大的一侧进行查找(反之亦然),查找时再次二分.这比顺序访问要少很多访问量,效率很高. 设:low ...

  4. Static方法在多线程环境下的运行

    最近看了Jfinal 一致对model的那个static final dao有些疑惑,全局一个实例安全吗?同时也出了一个疑惑,静态方法执行会有并发影响吗?看代码 StaticThread.java p ...

  5. SpringMVC操作指南-整合Spring、SpringMVC、Hibernate、JUnit、Log4j、C3P0

  6. Python模块应用 (linecache)

    linecache linecache是专门支持读取大文件,而且支持行式读取的函数库. linecache 预先把文件读入缓存起来,后面如果你访问该文件的话就不再从硬盘读取.对于大文件的读取效率还不错 ...

  7. iOS10 - 访问系统通讯录新方法

    所需框架 #import <ContactsUI/ContactsUI.h> 遵循代理 CNContactPickerDelegate 调用通讯录 如果在iOS10的机器上调用以前的ABP ...

  8. lua 类支持属性不能被修改

    背景 lua是类是借助表的来实现的, 类被定义后, 在使用场景下, 不希望被修改.如果被修改, 则影响的类的原始定义, 影响所有使用类的地方. 例如: --- router.lua class fil ...

  9. sys.argv

    import sys i=0 print len(sys.argv) while i < len(sys.argv): print 'sys.argv[%d]:%s' %(i,sys.argv[ ...

  10. Leetcode: Ternary Expression Parser

    Given a string representing arbitrarily nested ternary expressions, calculate the result of the expr ...