由于premake基于lua脚本,为了方便编辑lua脚本,我在emacs24中利用package system安装了lua-mode。

然后创建config.lua文件,填入下面这段,主要来自:http://industriousone.com/basic-script

-- A solution contains projects, and defines the available configurations
solution "Hello1"
configurations { "Debug", "Release" } -- A project defines one build target
project "Hello1"
kind "ConsoleApp"
language "C++"
files { "**.h", "**.cpp" } configuration "Debug"
defines { "DEBUG" }
flags { "Symbols" } configuration "Release"
defines { "NDEBUG" }
flags { "Optimize" }

创建main.cpp文件,很简单:

#include <iostream>
using namespace std; int main(void) {
cout << "hello1" << endl;
}

运行premake命令产生makefile

premake_study/hello1$ premake4 --file=config.lua --os=linux --platform=x64 gmake
Building configurations...
Running action 'gmake'...
Generating Makefile...
Generating Hello1.make...
Done.

现在执行make命令:

 make
==== Building Hello1 (debug) ====
Creating obj/Debug
main.cpp
Linking Hello1

创建了一个obj/Debug目录树,

premake_study/hello1$ tree
.
├── config.lua
├── Hello1
├── Hello1.make
├── main.cpp
├── Makefile
└── obj
└── Debug
├── main.d
└── main.o

运行Hello1, 成功打印"hello1" 字符串。

看一下产生的Makefile文件内容,会知道如何使用。

# GNU Make solution makefile autogenerated by Premake
# Type "make help" for usage help ifndef config
config=debug
endif
export config PROJECTS := Hello1 .PHONY: all clean help $(PROJECTS) all: $(PROJECTS) Hello1:
@echo "==== Building Hello1 ($(config)) ===="
@${MAKE} --no-print-directory -C . -f Hello1.make clean:
@${MAKE} --no-print-directory -C . -f Hello1.make clean help:
@echo "Usage: make [config=name] [target]"
@echo ""
@echo "CONFIGURATIONS:"
@echo " debug"
@echo " release"
@echo " debug64"
@echo " release64"
@echo ""
@echo "TARGETS:"
@echo " all (default)"
@echo " clean"
@echo " Hello1"
@echo ""
@echo "For more information, see http://industriousone.com/premake/quick-start"

好了,默认是Debug版本,现在运行命令,可以创建release版本。

premake_study/hello1$ make config=release all
==== Building Hello1 (release) ====
Creating obj/Release
main.cpp
Linking Hello1

还可传递参数 config=release64和config=debug64. 咋一看比cmake贴心好用。

不过以为之前运行premake4命令传递参数是--platform=x64, 所以这里make传递的config不管是什么都编译出64bit bianry. 用file命令可以查看之:

 file Hello1
Hello1: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xdef2bc128f21a691fa196dc20c50b7ad4dc56d0f, stripped

premake可以用来清理产生的make file

premake_study/hello1$ premake4 --file=config.lua clean
Building configurations...
Running action 'clean'...
Done.

不过即便我这里premake4用了参数--platform=x32,编译出来的还是64bit的binary。

还不是很清楚原因。

如果想要详细的看到编译的执行过程,和CMake使用方式一样,在make的时候加参数verbose=1

premake_study/hello1$ make config=release verbose=1 all
==== Building Hello1 (release) ====
Creating obj/Release
mkdir -p obj/Release
main.cpp
g++ -MMD -MP -DNDEBUG -O2 -o "obj/Release/main.o" -MF obj/Release/main.d -c "main.cpp"
Linking Hello1
g++ -o ./Hello1 obj/Release/main.o -s

premake在Ubuntu和GCC环境下创建简单的C++工程的更多相关文章

  1. ubuntu 14.04LTS 环境下配置NFS服务

    简言之,NFS(Network FileSystem,网络文件系统)用于在不同机器,不同操作系统之间通过网络互相分享各自的文件.NFS设计之初就是为了在不同的系统间使用,所以它的通讯协议设计与主机及操 ...

  2. ubuntu 14.04LTS 环境下搭建tftp服务器

    花费我一整天的时间在 ubuntu 14.04LTS 环境下搭建tftp服务器,网上好多资料参差不齐,简单来说,TFTP(Trivial File Transfer Protocol),是一个基于UD ...

  3. windows环境下创建 .文件夹

    一.windows环境下创建 .文件夹 1.新建一个文件夹 2.重命名为.properties.(名字前后都加点) 二.windows环境下创建 .文件 1.上面的方法对文件同样适用 2.运行CMD, ...

  4. Ubuntu 12.04环境下配置Postgresql和phppgadmin

    Ubuntu 12.04环境下配置Postgresql 9.1 和phppgadmin 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/zjianb ...

  5. ROS 教程之 navigation :在 catkin 环境下创建costmap layer plugin

    在做机器人导航的时候,肯定见到过global_costmap和local_costmap.global_costmap是为了全局路径规划服务的,如从这个房间到那个房间该怎么走.local_costma ...

  6. centos环境下创建数据库和表的方法

    centos环境下创建数据库和表的方法 //查询数据库的命令: mysql> SHOW DATABASES; +--------------------+ | Database         ...

  7. 【转】用systemJS+karma+Jasmine+babel环境去编写简单的ES6工程

    原文链接:http://www.cnblogs.com/shuoer/p/7779131.html 用systemJS+karma+Jasmine+babel环境去编写简单的ES6工程 首先解释下什么 ...

  8. Ubuntu 16.04 环境下配置apache2.4 + php5.6

    相信用惯了Windows的朋友一开始接触Linux是很崩溃的,因为很多东西都是通过命令行来完成的,包括安装绝大多数的开发工具以及环境,那么在Ubuntu下其实可以直接通过apt-get指令来安装apa ...

  9. 在Windows中单机环境下创建RabbitMQ集群

    本文根据:http://www.360doc.com/content/15/0312/17/20874412_454622619.shtml整理而来 RabbitMQ具有很好的消息传递性能,同时又是开 ...

随机推荐

  1. FluentConsole是一个托管在github的C#开源组件

    FluentConsole是一个托管在github的C#开源组件 阅读目录 1.控制台能有啥滑头? 2.FluentConsole基本介绍 3.使用介绍 4.资源 从该系列的第一篇文章 .NET平台开 ...

  2. QT基本数据类型(以前没见过qintptr和qlonglong)

    QT的基本数据类型 qint8:signed char 有符号8比特数据 qint16:signed short 16位数据类型 qint32:signed int. 32位有符号数据类型 qint6 ...

  3. 建房子之前先挖地基 - Java BlockingQueue理解

    最近一直在看<Think In Java>里关于并发部分的章节,读到第二十一章有一个有趣的比喻:必须先挖房子的地基,但是接下来可以并行的铺设钢结构和构建水泥部件,而这两项任务必须在混凝土浇 ...

  4. iOS KVO & KVC

    键值观察:值更改时通知观察者 键值观察(Key-value observing,或简称 KVO)允许对象观察另一个对象的属性.该属性值改变时,会通知观察对象.它了解新值以及旧值:如果观察的属性为对多的 ...

  5. Android自动化测试基础知识——MONKEY测试工具(转的)

    本周开始启动手机输入法simeiji的自动化测试,同时开始接触手机浏览器自动化测试.接下来会对android自动化测试工具和方法做一个专题研究. 第一篇介绍monkey测试工具. 1 自动化测试背景 ...

  6. 驱动:中断【2】中断处理程序、中断上下文中处理延时及一些函数的调用规则(调IIC中断驱动有感)

    中断处理程序.中断上下文中处理延时及一些函数的调用规则(调IIC中断驱动有感)http://blog.csdn.net/samantha_sun/article/details/6790492 1,中 ...

  7. Android中弹出对话框,AlertDialog关键代码

    写在这里便于以后查看. Android中弹出对话框的关键代码: btn01.setOnClickListener(new OnClickListener() { @Override public vo ...

  8. Windows服务编程集合

    http://zyan.cc/windows_mstsc/ Optionname--Optionvalues描述 type=----own, share, interact, kernel, file ...

  9. thiscall仅仅应用于“C++”成员函数(this指针存放于CX寄存器,参数从右到左压)

    _stdcall是Pascal程序的缺省调用方式,通常用于Win32 Api中,函数采用从右到左的压栈方式,自己在退出时清空堆栈.VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上" ...

  10. 使用MongoDB的开源项目(转)

    根据谷歌的搜索结果筛选出来的. 统计应用 counlty https://count.ly/ mongopress 开源CMS系统 http://www.mongopress.org/ Rubedo ...