premake管理一个solution和多个project的目录树

发布时间:2016-12-11 16:04:55 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"premake管理一个solution和多个project的目录树",主要涉及到premake管理一个solution和多个project的目录树方面的内容,对于premake管理一个solution和多个project的目录树感兴趣的同学可以参考一下。

前文premake基本配置详解只是介绍了基本的配置,一个solution包含一个project,且project没有自己的目录,生成的makefile也都在solution目录下。但是实际工作中,显然需要更多:1. 所有的project代码都应该放在自己的目录下2. premake生成的makefile需要专门放在build目录下,和cmake类似3. 最后编译出来的binary,应该放在output目录下现在看一下示例工程,目录结构:/solution1$ tree . ├── build ├── config.lua ├── hello1 │   └── main.cpp ├── hello2 │   └── main.cpp └── outputsolution1目录是顶层,其中定义了config.lua脚本文件,用来执行premake命令。build和output都是空目录,作用上面已经解释过。hello1和hello2是两个简单的c++ project.里面的main.cpp都是打印一个字符串到console。现在看一下config.lua文件内容:-- A solution contains projects, and defines the available configurations solution ("solution1") configurations {"Release","Debug"} location "build" targetdir "output" -- A project defines one build target project "hello1" basedir "hello1" location "build/hello1" kind "ConsoleApp" language "C++" files { "hello1/*.h", "hello1/*.cpp" } includedirs {"/usr/include/x86_64-linux-gnu/c++/4.8"} configuration "Debug" defines { "DEBUG" } flags { "Symbols" } configuration "Release" defines { "NDEBUG" } flags { "Optimize" } -- A project defines one build target p2 = project("hello2") basedir(p2.name) location("build/" .. p2.name) kind "ConsoleApp" language "C++" files { p2.name .. "/*.h", p2.name .. "/*.cpp" } includedirs {"/usr/include/x86_64-linux-gnu/c++/4.8"} configuration "Debug" defines { "DEBUG" } flags { "Symbols" } configuration "Release" defines { "NDEBUG" } flags { "Optimize" } 说明:1. 为了将所有的makefile都放在build目录,在solution下面使用了函数location "build"2. 为了将两个project的makefile在build目录中加以区分,所以在project下面又使用了location加以区分3. 每个project都使用了basedir告知premake这是project所在目录,不过注意,这和编译*.cpp文件没有关系,不要以为premake能聪明的猜到basedir下面的文件都是这个项目的。实际上premake只会根据project下面的files函数来决定编译哪些文件。4. 因此用files指令明确告诉premake哪些文件要被视作属于这个project,从而被编译,我在这里指定了目录名称,比如"hello1/*.cpp"5. includedirs我这里添加是因为clang找不到头文件所致,GCC可能并不需要。6.注意看hello1和hello2的设置有所区别。hello1很傻,目录名称hello1多次使用,而hello2显得更加简单。以lua的标准方式编写脚本,首先设置project名称,然后保存返回的project对象,之后反复使用p2.name这个属性。 ..是字符串拼接方式。hello2中必须用标准lua的函数调用方式才行。好,现在开始使用。在solution1目录下运行命令:solution1$ premake4 --file=config.lua gmake Building configurations... Running action 'gmake'... Generating build/Makefile... Generating build/hello1/Makefile... Generating build/hello2/Makefile... Done.进入build目录后,运行:solution1/build$ make ==== Building hello1 (release) ==== Creating obj/Release main.cpp Linking hello1 ==== Building hello2 (release) ==== Creating obj/Release main.cpp Linking hello2回到solution1/output目录,有了两个程序hello1和hello2.搞定。现在是一个适合于实际项目开发的基本结构了。最后将hello1和hello2的配置统一,都使用变量p保存prject对象。-- A solution contains projects, and defines the available configurations solution ("solution1") configurations {"Release","Debug"} location "build" targetdir "output" -- A project defines one build target p = project("hello1") basedir(p.name) location("build/" .. p.name) kind "ConsoleApp" language "C++" files { p.name .. "/*.h", p.name .. "/*.cpp" } includedirs {"/usr/include/x86_64-linux-gnu/c++/4.8"} configuration "Debug" defines { "DEBUG" } flags { "Symbols" } configuration "Release" defines { "NDEBUG" } flags { "Optimize" } -- A project defines one build target p = project("hello2") basedir(p.name) location("build/" .. p.name) kind "ConsoleApp" language "C++" files { p.name .. "/*.h", p.name .. "/*.cpp" } includedirs {"/usr/include/x86_64-linux-gnu/c++/4.8"} configuration "Debug" defines { "DEBUG" } flags { "Symbols" } configuration "Release" defines { "NDEBUG" } flags { "Optimize" }

上一篇:JavaMail邮件发送-发送带附件的邮件
下一篇:计算机字符编码及Unicode简介

相关文章

相关评论