我正在尝试在premake中设置多个目标。目前,我专注于Xcode,但希望同样的想法也适用于MS Visual Studio。
在我的工作区中,我有一个库,当前有一个以项目名称命名的构建目标(我们称之为“MyLibrary”)。然后,我在工作区中有其他项目使用这个库。目前,我只支持工作区中所有项目的Debug配置,但我正在尝试为我的库添加两个目标-- Release和Test。因此,我希望有以下目标:
- MyLibrary-调试
- MyLibrary发布
- MyLibrary-Test
如果我可以让库项目输出两个目标,我可以告诉我的项目基于配置使用正确的目标:
project "MyLibrary"
--- Create multiple targets
project "DemoProject"
--- stuff
filter { "configurations:Debug" }
links { "MyLibrary-Debug" }
filter { "configurations:Release" }
links { "MyLibrary-Release" }
这是我试图解决的一个问题。第二个是测试。目前,我有一个单独的单元测试项目。这些测试使用库并运行测试以查看库是否工作。这工作得很好,但我不能为我的图书馆生成覆盖率报告。这样的测试更适合于E2 E测试,而不是单元测试。所以,我基本上需要两个项目配置,除了一些小的变化,还包括测试和测试库:
project "MyLibrary"
kind "StaticLib"
files {
"engine/src/**.cpp",
"engine/src/**.h",
}
links { ... }
-- other config in library
project "MyLibrary-Test"
kind "ConsoleApp"
files {
"engine/src/**.cpp",
"engine/src/**.h",
"engine/tests/**.h",
"engine/tests/**.cpp",
}
links { "gtest", "gtest_main", "gmock", ... }
-- other config in library
对于多个目标,我可以为目标分配不同的配置,并执行以下操作:
project "MyLibrary"
kind "StaticLib"
files {
"engine/src/**.cpp",
"engine/src/**.h",
}
links { ... }
filter { "configurations:Test" }
kind "ConsoleApp"
files {
"engine/tests/**.cpp",
"engine/tests/**.h"
}
links { "gtest", "gtest_main", "gmock" }
-- Set different targets somehow, where each target
-- sets configuration value
有没有可能在premake中做到这一点,特别是在一种不特定于Xcode的方式下?例如,如果我使用gmake
,目标会创建不同的二进制文件/库。
1条答案
按热度按时间kjthegm61#
您只需要使用不同的
project
来拥有不同的target
。以下是我对premake的理解和使用方法,目前为止只使用gmake2。这可能不是预期的方式,但我认为它可以按照您想要的方式组织输出。
在
workspace
级别上必须至少有一个configuration
。我们可以在工作区中有几个
project
,每个project
都有自己的二进制targetname
。然后选择使用make targetname
构建的目标。在同一个
project
中,我们可以使用filter { "configuration:confname" }
以多种方式配置目标(例如发布和调试)。然后使用make config=confname
构建。我没有测试链接,但我想你可以把这个过滤器。因此,要构建具有特定配置的特定目标:
不指定配置将使用第一个配置,而不指定项目将生成所有目标。
我承认整个方法有点笨拙,因为我们必须在每个项目中重复配置过滤器,即使它们在任何地方都是相同的。
这里有一个小例子。