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 ├─ ...
随机推荐
- 20145205 实验一 Java开发环境的熟悉
实验内容 命令行下Java程序开发 IDEA下Java程序开发.调试 练习(通过命令行和Eclipse两种方式实现,在Eclipse下练习调试程序) 实现凯撒密码,并进行测试 实验要求 使用JDK编译 ...
- SQL21日自学通笔记(1)
查找不重复数据 DISTINCT 查询日期 在access中格式是yyyy-mm-dd,Query执行的语句中用‘#’+Formatdata(‘yyyy-mm-dd’,date)+‘#’ SQL运算符 ...
- 简单查询(select)
在数据库中,字符串进行运算时,会将字符串内容转化为数字进行运算 查询语法:select 列 from 表 where 条件 order by 排序 asc:升序 ...
- JavaScript 入门教程四 语言基础【2】
一.数据类型介绍: undefined null NaN 1.判断当前变量是否为 undefined: if (i === undefined) 或者 if (typeof (i) === " ...
- Ubuntu下的PHP开发环境架设
Ubuntu下的PHP开发环境架设 今天重新装了ubuntu那么就吧过程记录下. 打开终端,也就是命令提示符. 我们先来最小化组建安装,按照自己的需求一步一步装其他扩展.命令提示符输入如下命令: ...
- Vim,极简使用教程,让你瞬间脱离键鼠切换的痛苦
注:看大家对Vim仇恨极大,其实它只是一种文本操作方式,可以减少键鼠的切换,从而让编辑文本的操作更迅捷.并不等同于IDE,在我看来,它们是两个是包含关系,IDE可以有Vim编辑模式.Vim或许可以通过 ...
- A Taxonomy of Parallel Processor Architectures
COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION
- iOS 保持界面流畅的技巧
http://blog.ibireme.com/2015/11/12/smooth_user_interfaces_for_ios/
- 对System.ComponentModel.DataAnnotations 的学习应用
摘要 你还在为了验证一个Class对象中很多数据的有效性而写很多If条件判断吗?我也同样遇到这种问题,不过,最近学了一项新的方法,让我不在写很多if条件做判断,通过给属性标注特性来验证数据规则,从此再 ...
- 简单理解call_user_func和call_user_func_array两个函数
call_user_func():调用一个回调函数处理字符串, 可以用匿名函数,可以用有名函数,可以传递类的方法, 用有名函数时,只需传函数的名称 用类的方法时,要传类的名称和方法名 传递的第一个参数 ...