linux下开发c++第二弹--helloworld与makefile
一:hello world
sudo vim hello.cpp
输入 g++ -o hello hello.cpp 获得hello
输入 ./hello 运行,显示结果hello world! , ./表示在同一目录下。
二,makefile
1、基本的make
makefile编写据传闻应该是linux环境开发者必备技能,本人小白,暂时写一点儿练习时使用的,以后如果有其他改进另行添加。另外,网上密密麻麻的复制粘贴的“如果一个项目有3个头文件,8个c文件”的教程,虽然不知道原作者是谁,但是慢慢琢磨和学习,这个教程本身还是很不错的,依然是helloworld,虽然并不用这么麻烦,作为练习还是写了一个makefile
sudo vim makefile
当前目录控制台输入: make 之后会在控制台打印出make文件中的命令行
多出来hello 和 hello.o两个文件
执行:./hello 结果 :hello world!
执行:make clean 结果 :删除.o扩展名的文件
由此我们看出,hello为最终结果,而.o都是一些中间代码,格式自上而下进行:
目标名: 依赖文件
(tab)命令输入
这里需要强烈注意的是:命令前必须有一个tab而不是四格空格。因为根据规则可以知道,在执行make时,系统会认为tab之后的是一个可执行的命令行,所以make文件其余地方对其或者其他处理请不要用tab,同时vim很多人下载的网上大神配置好的vim中会有空格替代tab的设定,可以通过在个人目录的.vimrc.local(每个人的可能不一样的文件)中输入 set noexpandtab 解决这个问题。此外,有教程说makefile文件的冒号前后必须空格,可能根据不同的规范要求吧,并没有tab这样一旦不照做崩盘的情况出现。
2、命名为makefile是因为make会自动识别当前目录下的文件,命名为makefile,Makefile据说都可以。
如果命名为其他的文件,同时还要make的话输入命令行
make -f 文件名
如果需要执行make中的clean命令,输入命令行
make -f 文件名 clean
3,强大的省略功能(缩写简化)
这一部分因为我还没有用到太复杂的功能,充其量也就是两个cpp一个h这样的文件组合进行测试,所以以下为假设:
如果我们的main由很多中间代码合成,我们正常情况
如果这么书写那么一定会出很大问题,尤其是大项目的内容更多,改着改着没准眼一花就写错了各地方,然后各种崩盘。所以我们可以用声明变量的方法,将重复的而且过长的子串提取出来。看上去整洁了不少的样子,修改的时候问题也会简化
另外就是makefile的推导功能,这个还是比较喜欢的,因为小白经常gcc g++ -c -o什么的感觉乱糟糟,所以借鉴了之前的那篇经典教程,gnu是可以自动推导判断出你到底想要什么,如果目标是half.o那么make就会寻找到half.c或者cpp之类的作为依赖,这时候只需要填写half.o所需要的其他的内容,比如.h文件,如下图所示两种效果相同。表示本人暂时没接触到也并不喜欢如果多个.o文件依赖同一.h文件进行缩写的那种,因为缺乏了美感和层次感。
linux下开发c++第二弹--helloworld与makefile的更多相关文章
- linux下开发c第一弹--相关环境需求
我用的是mac,mac和linux一般集成了一定的开发环境,基本上需要gcc.vim.gdb之类的,linux下需要apt-get,mac下homebrew的brew install都可以解决问题.同 ...
- 使用eclipse在linux下开发C/C++
一直在Linux下开发,苦于没有IDE,一般都是自己编写Makefile,然后在windows下用文本编辑器ftp打开文件编辑,然后在linux下完成编译.调试代码也只能是命令行用gdb进行调试,相当 ...
- linux下开发C语言需要安装的manpages手册
linux下开发C代码需要安装的manpages: $ sudo apt-get install manpages$ sudo apt-get install manpages-dev$ sudo a ...
- Linux下开发STM32单片机
一开始学习51单片机就是用的MDK这个IDE软件,IDE软件虽然看起来直观好像更加容易入门(因为有界面看起来很形象),但是实际上IDE却是向我们这些入门人员隐藏了背后真实存在的过程,让我们以为编译就是 ...
- linux下开发板网络速度测试记录
由于做的项目对于网络和USB的读写速度有很高的要求,因此新拿回来的板子要测试网络和usb的最佳传输速度.要考虑不少因素,先把我能想到的记录下来. 测试的环境是开发板和ubuntu虚拟机 ...
- 05 Linux下开发JSP项目(Hello world)
测试环境: 主机系统:Win 7 虚拟机:VMware workstation 11.1.0 虚拟机OS: centos 6.5 64位 Kernel 2.6.32-431-e16.x86_64 My ...
- wxWidgets 在 Linux 下开发环境配置
本文基于 CodeBlocks (16.0.1) 和 wxWidgets (3.0.2) 搭建 Linux 下 GUI 开发环境. 1. 安装 CodeBlocks Ubuntu 默认的源当前 Cod ...
- linux下开发,解决cocos2d-x中编译出现的一个小问题, undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
解决cocos2d-x中编译出现的一个小问题 对于cocos2d-x 2.×中编译中,若头文件里引入了#include "cocos-ext.h",在进行C++编译的时候会遇到例如 ...
- Linux下开发环境的搭建(For C++ OIer)
说句实话,对于OIer来说,Linux真的是个很好的开发平台. 这里既没有游戏的喧嚣,也没有广告的打扰,gcc/g++早已预装,一切已为你准备好......(???)即使对于日常使用,也绰绰有余. 如 ...
随机推荐
- java类的加载以及初始化顺序
类的加载和初始化的了解对于我们对编程的理解有很大帮助,最近在看类的记载方面的问题.从网上查阅了若干文章,现总结如下: 我们通过一段代码来了解类加载和初始化的顺序: package com.classl ...
- maven项目配置Jetty服务器
<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin ...
- php整理(二): 数组
数组: 首先说一下对PHP中的理解,建立一个好的理解模型还是很关键的: 1.PHP中的数组实际上可以理解为键值对,key=>value;而对于key的取值,可以是string/integer;v ...
- 使用stringstream时的清空操作
在C++中可以使用stringstream来很方便的进行类型转换,字符串串接,不过注意重复使用同一个stringstream对象时要先继续清空,而清空很容易想到是clear方法,而在stringstr ...
- POJ 1166 The Clocks (爆搜 || 高斯消元)
题目链接 题意: 输入提供9个钟表的位置(钟表的位置只能是0点.3点.6点.9点,分别用0.1.2.3)表示.而题目又提供了9的步骤表示可以用来调正钟的位置,例如1 ABDE表示此步可以在第一.二.四 ...
- LA 3704 (矩阵快速幂 循环矩阵) Cellular Automaton
将这n个格子看做一个向量,每次操作都是一次线性组合,即vn+1 = Avn,所求答案为Akv0 A是一个n*n的矩阵,比如当n=5,d=1的时候: 不难发现,A是个循环矩阵,也就是将某一行所有元素统一 ...
- UVA 11426 GCD-Extreme(II) ★ (欧拉函数)
题意 求Σ{1<=i<N} Σ{i<j<=N} GCD(i, j) (N<=4000000) 分析 原始思路 暴力求明显是不行的,我们把式子简化形式一下发现它可以 ...
- HDU 3749 Financial Crisis 经济危机(点双连通分量)
题意: 给一个图n个点m条边(不一定连通),接下来又q个询问,询问两个点是为“不相连”,“仅有一条路径可达”,“有两条及以上的不同路径可达”三种情况中的哪一种.注:两条以上的路径指的是路径上的点连1个 ...
- ffmpeg开发指南
FFmpeg是一个集录制.转换.音/视频编码解码功能为一体的完整的开源解决方案.FFmpeg的开发是基于Linux操作系统,但是可以在大多数操作系统中编译和使用.FFmpeg支持MPEG.DivX.M ...
- 【转】有趣的Autolayout示例-Masonry实现
原文网址:http://tutuge.me/2015/05/23/autolayout-example-with-masonry/ 好久没有写Blog了,这段时间有点忙啊=.=本文举了3个比较有“特点 ...