程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> premake基本配置詳解

premake基本配置詳解

編輯:C++入門知識

前文premake在Ubuntu和GCC環境下創建簡單的C++工程中舉了一個例子,雖然能work,但是並不是很了解。後來花了點時間看了lua的語法,自以為理解了,再回頭來看,發現還是有些不懂。現在明白了,premake雖然基於lua,但是也有自己的一些語法。標准的lua語法在premake中是肯定可以用的。   現在來細說一下原來的例子中的腳本。 [plain]   -- 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" }     注意: 1. 這些solution, configurations等都是function, 並不是變量,這裡和lua標准語法不一樣(標准寫法也可以),而是用premake自定義的規則,有空格,有{ }號等。 2. solution可以包含多個project,語法參考http://industriousone.com/solution,solution管理多個project,這個設計很實用。 3. configurations接受的參數是每一段configuration的名字,自己應該在每個project中定義對應的configuration的設置。必須在所有project定義前調用configurations。 4. configurations函數的參數,Debug放在最前面,也就意味著將來產生的*.make文件中,Debug會作為默認設置。如果現在將Release放在最前面,生成make文件後,會看到: [plain]   ifndef config     config=release   endif   當make不傳遞參數時,就會默認使用release配置。 5. project裡面可以通過configuration進行設置 ,文檔:http://industriousone.com/project,裡面有錯誤: [plain]   solution "MySolution"      configuration { "Debug", "Release" } // should be configurations          project "MyProject"     6. 注意kind,即可用在configuration裡面,也可用在project裡面。文檔:http://industriousone.com/kind 7. configuration就是對應3中的配置函數。注意,可以用通配符,比如"*Lib"或則“*DLL”來匹配configurations中的參數。configuration函數之後所有的配置都屬於這個configuration,直到遇到下一個configuration為止。在我的例子中,後續的只有defines和flags函數。文檔:http://industriousone.com/configuration 8. defines用來給一個project添加預處理或者編譯符號。前面兩個configuration裡面分別用來一次define,看一下: [plain]   configuration "Debug"   defines { "DEBUG" }   和 [plain]   configuration "Release"   defines { "NDEBUG" }   結果在生成的Hello1.make文件中,我們看到生成了對應的gmake指令:-DDEBUG和-DNDEBUG [plain]   ifeq ($(config),debug)     OBJDIR     = obj/Debug     TARGETDIR  = .     TARGET     = $(TARGETDIR)/Hello1     DEFINES   += -DDEBUG   和 [plain]   ifeq ($(config),release)     OBJDIR     = obj/Release     TARGETDIR  = .     TARGET     = $(TARGETDIR)/Hello1     DEFINES   += -DNDEBUG     9. flags用來指定編譯或者鏈接過程中的標識,查看文檔:http://industriousone.com/flags 我這裡用了最普通的, "Symbols" 允許編譯出調試信息,"Optimize"編譯優化,一般為Release准備。      10. premake指令可以簡化為: [plain]   premake4 --file=config.lua gmake     原來的 [plain]   premake4 --file=config.lua --os=linux --platform=x64 gmake     有副作用。特別是--platform=x64會導致產生的make文件中有debug64和release64的配置。還是由自己控制的比較好。   11. 最後介紹一個添加文件和目錄,甚至排除某些文件的用法。參考:http://industriousone.com/adding-files 有了這個,就沒必要像一般的makefile每個目錄都寫makefile,和cmake差不多方便了。          

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved