这篇文章演示多目录,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. 人工神经网络NN

    [面向代码]学习 Deep Learning系列 http://blog.csdn.net/coolluyu/article/details/20214617 正则化的最小二乘法 深入浅出LSTM神经 ...

  2. 如何判定php环境是线程安全(TS)还是不安全(NTS)

    通过phpinfo(); 查看其中的 Thread Safety 项,这个项目就是查看是否是线程安全,如果是:enabled,一般来说应该是ts版,否则是nts版.

  3. IOS网络第二天 - 07-发送JSON给服务器

    *************** #import "HMViewController.h" #import "MBProgressHUD+MJ.h" @inter ...

  4. 关于type erasure

    哇,好久没有写blog了,再不写的话,blog的秘密都要忘记了,嘿嘿. 最近在试着参与一个开源项目,名字叫avim(A Vibrate IM),别想多了哟.地址是:https://github.com ...

  5. FTP提示505错误解决办法

    使用ServerU建FTP服务器时,选定了锁定主文件夹,不选即可解决问题.

  6. busybox rootfs 启动脚本分析(二)

    上次分析了busybox的启动脚本,这次分析一下init.d中一些脚本的内容. 参考链接 http://www.cnblogs.com/helloworldtoyou/p/6169678.html h ...

  7. [转]word2vec使用指导

    word2vec是一个将单词转换成向量形式的工具.可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度. 一.理论概述 (主要来源于http://lic ...

  8. python---tcp/ip网络编程

    重点总结: 服务端:一直运行(while true),监听运行所在机器(ip)某端口,多线程或多进程接收客户端的socket请求 客户端:主动发起请求,需求知道服务器的ip和端口 服务端: # -*- ...

  9. Add&Delete WindowService

    Part One-Add: Step4: Add the new service to windows service: $commandLine = 'D:\IMS\2.16.0.42-DataSe ...

  10. git/github学习笔记

    郑重提示,本文来自这里,如果喜欢,请关注原作者. 1. git 版本控制系统 相比CVS\SVN优势: - 支持离线开发,离线Repository- 强大的分支功能,适合多个独立开发者协作- 速度块 ...