由于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. 我的ubuntu

    题外话:不知不觉也已经大三,最近思考了很多.在腾讯网看到了对李嘉诚的一篇专访,感触颇深. 想起来我从第一次接触ubuntu到现在也有一年了,记得第一个版本还是12.04,不过很快就换成了12.10,在 ...

  2. 0课程介绍(Week1,3月3日)

    一.自我介绍 1.姓名:杨晔 2.办公室:B211-2 3.电子邮件:yangye@zjjy.com.cn 4.QQ:6706892 5.博客:http://www.cnblogs.com/meety ...

  3. Maven Jrebel 多模块热部署方案

    近期在构建maven多模块项目时,发现web module依赖的其它模块,每次都要clean install成一个jar包,然后运行web module才能加载. 本生jrebel是配置在了web m ...

  4. hdu1698 Just a Hook 线段树:成段替换,总区间求和

    转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1698 Problem ...

  5. Fragment实现不支持左右滑动的Tab

    主要思想:顶部标题top.xml,中间Fragment,底部Tab导航. top.xml具体实现: <?xml version="1.0" encoding="ut ...

  6. CodeForces 450B Jzzhu and Sequences 费波纳茨数列+找规律+负数MOD

    题目:Click here 题意:给定数列满足求f(n)mod(1e9+7). 分析:规律题,找规律,特别注意负数取mod. #include <iostream> #include &l ...

  7. linux 工具: Top

    linux TOP命令各参数详解[转载] http://www.cnblogs.com/sbaicl/articles/2752068.html

  8. tomcat解析之简单web服务器(图)

    链接地址:http://gogole.iteye.com/blog/587163 之前有javaeyer推荐了一本书<how tomcat works>,今天晚上看了看,确实不错,第一眼就 ...

  9. HDU2138 随机素数测试 Miller-Rabin算法

    题目描述 Give you a lot of positive integers, just to find out how many prime numbers there are.. In eac ...

  10. jquery 单击li防止重复加载的实现代码

    因为加载内容比较慢,所以用户可能在li上不经意点击了两次,那么就会请求两次,这是我们不想看到的. 今天在javascript-jquery群上一筒子发了两个demo给我,他的方法是先将单击的li节点拷 ...