ubuntu 中使用makefile组织c++多文件的简陋方法
现有类定义Sales_item.hpp Sales_item.cpp
主函数my7_31.cpp(代码来源于c++primer 习题解答7_31)
希望使用makefile在Ubuntu中进行编译链接,生成可执行文件edit。
注:目的是了解makefile如何使用,这个makefile文件并不通用,只能体现makefile的基本功能
代码如下
Sales_item.hpp
#pragma once
#include <iostream>
#include <string> class Sales_item
{
public:
Sales_item() :units_sold(0), revenue(0.0){}
private:
std::string isbn;
unsigned int units_sold;
double revenue;
public: bool same_isbn(const Sales_item & rhs)const; std::istream & input(std::istream & in);
std::ostream & output(std::ostream & out)const;
double avg_price() const;
};
Sales_item.cpp
#include "Sales_item.hpp" bool Sales_item::same_isbn(const Sales_item & rhs) const
{
return this->isbn==rhs.isbn;
} std::istream & Sales_item::input(std::istream & in)
{
double price;
in >> isbn >> units_sold >> price;
if (in)
{
revenue = units_sold*price;
}
else
{
units_sold = 0; revenue = 0.0;
}
return in;
//TODO: insert return statement here
} std::ostream & Sales_item::output(std::ostream & out) const
{
out << isbn << "\t" << units_sold << "\t" << revenue<<"\t"<<avg_price();
return out;
//TODO: insert return statement here
} double Sales_item::avg_price()const
{
if (units_sold)
return revenue / units_sold;
else
{
return 0;
} }
my7_31.cpp
//main for read class Sales_item
#include <iostream>
#include "Sales_item.hpp" using namespace std; int main ()
{
Sales_item item;
cout << "enter some trasactions(Ctrl+z to end) :" << endl;
while (item.input(cin))
{
cout << "the trnsaction teade is :" << endl;
item.output(cout);
cout << endl;
}
return 0;
}
makefile
参考:http://www.chinaunix.net/old_jh/23/408225.html
edit:my7_31.o Sales_item.o
g++ -o edit my7_31.o Sales_item.o
Sales_item.o:Sales_item.cpp Sales_item.hpp
g++ -c Sales_item.cpp
my7_31.o:my7_31.cpp Sales_item.hpp
g++ -c my7_31.cpp
clean:
上面是原始版本
简洁版,依赖于make强大的自动推导功能,只需要给出相应的.h依赖项即可
edit:my7_31.o Sales_item.o
g++ -o edit my7_31.o Sales_item.o
Sales_item.o: Sales_item.hpp my7_31.o:Sales_item.hpp clean:
ubuntu 中使用makefile组织c++多文件的简陋方法的更多相关文章
- Ubuntu 中软件的安装、卸载以及查看的方法总结
Ubuntu 中软件的安装.卸载以及查看的方法总结 博客分类: Linux UbuntuDebian配置管理CacheF# 说明:由于图形化界面方法(如Add/Remove... 和Synaptic ...
- 在Win7中IIS配置Asp.Net虚拟文件夹的方法及错误总结!
在Win7中IIS配置Asp.Net虚拟文件夹的方法总结! 一.右键[站点].点击[加入虚拟文件夹]或[虚拟应用程序],笔者建议最好建立虚拟应用程序,由于这就跟一个站点差点儿相同.不用考虑路径问题. ...
- 【linux】Ubuntu中shell脚本无法使用source的原因及解决方法
问题现象: shell脚本中source aaa.sh时提示 source: not found 原因: ls -l `which sh` 提示/bin/sh -> dash 这说明是用dash ...
- Makefile 描述的是文件编译的相关规则,它的规则主要是两个部分组成,分别是依赖的关系和执行的命令 PHONY伪目标实践
Makefile的工作流程 http://c.biancheng.net/view/7091.html Makefile文件是什么? 我们教程主要是讲的是 Makefile .很多 Linux(Uni ...
- 在Ubuntu系统中解压rar和zip文件的方法
大家在以前的windows系统中会存有很多rar和zip格式的压缩文件,Ubuntu系统默认情况下对这些文件的支持不是很好,如果直接用"归档管理器"打开会提示错误,因此今天跟大家分 ...
- Ubuntu中改变文件的默认打开方式
其实最简单的方法是右键,在属性中修改,不过这样做没啥意义. ubuntu中与文件的打开方式相关的配置文件有四个: /etc/gnome/defaults.list 这是全局配置文件 /usr/shar ...
- Ubuntu中的.bashrc文件
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置./etc/bashrc:为每一个运 ...
- 使用secureCRT和Telnet将文件压缩导出到Ubuntu中,到Ubuntu中加压缩发现:tar解压包的时候出现错误gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting now
细节描述: 问题如题所示:查找博客园和CSDN上查找问题,得到问题解决方法大致如下: 1 修改解压缩命令: 由 tar zxvf software_package.tar.gz变为tar xvf so ...
- ubuntu中文件夹的作用
/bin系統有很多放置執行檔的目錄,但/bin比較特殊.因為/bin放置的是在單人維護模式下還能夠被操作的指令. 在/bin底下的指令可以被root與一般帳號所使用,主要有:cat, chmod, c ...
随机推荐
- python 连接 SQL Server 数据库
#!/usr/bin/python # -*- coding:utf-8 -*- import pymssql import pyodbc host = '127.0.0.1:1433' user = ...
- Python库的安装(Windows/Linux通用)
pip安装 最简单的安装方式,自动下载并安装. pip:包管理工具 安装步骤 执行安装命令:pip install <package_name> wheel安装 在网速较差的情况下适用. ...
- zabbix 4.04 安装文档 - 基于CentOS 7.6
1 安装前准备: 1.1 安装JDK 卸载openjdk # rpm -qa | grep java # yum remove java-1.8.0-openjdk # yum remove ...
- 浅谈Java三大特性之封装
目录 前言 好处 介绍(实现方式) 示例 小结 感谢阅读!!! 三大特性之浅谈封装 前言 英语:Encapsulation--封装,包装. 面向对象的封装与真实世界的目的是一样的.封装能够使外部访问者 ...
- 6.7 Mapreduce作业流JobControl和Oozie
1.1 Mapreduce作业流JobControl和Oozie 更复杂的任务,需要多个mapreduce作业,形成作业流,而不是增加map和reduce的复杂度.复杂问题,可以用高级语言pig.h ...
- ThreadLocal解析:父线程的本地变量不能传递到子线程详解
众所周知,ThreadLocal类是java提供线程本地变量的工具类.但父线程的本地变量却不能被子线程使用,代码如下: public static void main(String[] args) { ...
- 6年iOS开发被裁员,是行业的饱和还是经验根本不值钱?
前言: 最近看到很多iOS开发由于公司裁员而需要重新求职的.他们普遍具有4年甚至更长的工作经验.但求职结果往往都不太理想. 我在与部分iOS开发者交谈的过程中发现,很多人的工作思路不清晰,技能不扎实, ...
- 【转】经典的SQL语句面试题
Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname,T#) 课程表SC(S#,C#,score) 成绩表Teacher(T#,Tname) 教师表 问题: 1 ...
- navicate远程连接mysql8.0失败
已经给了远程连接权限(update mysql.user set host = "%" where user = 'root'; flush privileges;) 连接错误提示 ...
- CTPN中anchors代码
import numpy as np def generate_basic_anchors(sizes, base_size=16): #base_anchor([0,0,15,15]) base_a ...