• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
james1207

博客园    首页    新随笔    联系   管理    订阅  订阅

premake在Ubuntu和GCC环境下创建简单的C++工程

由于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


 

 

 

 

posted @ 2013-09-03 19:26  Class Xman  阅读(444)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3