PremakeToolchain¶
警告
此功能是实验性的,可能会发生重大更改。有关更多信息,请参阅 Conan 稳定性 部分。
重要
此类生成的文件仅与 Premake 版本 >= 5.0.0 兼容
PremakeToolchain
生成器可以在 conanfile 中按名称使用
class Pkg(ConanFile):
generators = "PremakeToolchain"
[generators]
PremakeToolchain
它也可以在 conanfile 的 generate()
方法中完全实例化
使用示例
from conan.tools.premake import PremakeToolchain
class Pkg(ConanFile):
settings = "os", "compiler", "build_type", "arch"
def generate(self):
tc = PremakeToolchain(self)
tc.extra_defines = ["VALUE=2"] # Add define to main premake workspace
tc.extra_cflags = ["-Wextra"] # Add cflags to main premake workspace
tc.extra_cxxflags = ["-Wall", "-Wextra"] # Add cxxflags to main premake workspace
tc.extra_ldflags = ["-lm"] # Add ldflags to main premake workspace
tc.project("main").extra_defines = ["TEST=False"] # Add define to "main" project (overriding possible value)
tc.project("main").extra_cxxflags = ["-FS"] # Add cxxflags to "main" project
tc.project("test").disable = True # A way of disabling "test" project compilation
tc.project("foo").kind = "StaticLib" # Override library type of "foo"
tc.generate()
生成的文件¶
在 conan install (或在缓存中构建包时)之后,PremakeToolchain
会生成 conantoolchain.premake5.lua
文件,其中包含 generate()
方法中提供的信息,以及从当前 settings
、conf
等翻译的信息。
Premake 不公开任何与注入/修改构建脚本交互的 API。此外,Premake 没有工具链的概念,因此遵循 premake 维护者的指示(请参阅 premake 讨论),由于 Premake 构建在 Lua 脚本之上,Conan 生成的文件是一个 Lua 脚本,它将覆盖原始的 premake 脚本,添加以下信息:
从 Conan 设置检测
buildtype
。根据需要定义 C++ 标准。
根据需要定义 C 标准。
根据 conan profile 和操作系统检测 Premake
action
。定义构建文件夹,以避免 Premake 默认在源存储库中创建构建文件夹和对象文件的行为(这违背了 conan 的良好实践)。
根据用户配置值定义编译器和链接器标志以及定义。
在交叉构建时定义正确的目标体系结构。
根据 conan 选项定义
fPIC
标志。根据
shared
conan 选项,PremakeToolchain
将workspace
的kind
设置为SharedLib
或StaticLib
。
注意
PremakeToolchain
无法覆盖项目已定义 kind
属性(典型情况)的项目 kind
。它只能覆盖顶层 workspace.kind
,这只会影响没有定义 kind
的项目。
建议:由于 Premake 不提供像 CMake 的 BUILD_SHARED_LIBS 那样的外部管理库创建类型的机制,因此在使用 conan 时,建议**避免**在库项目上定义 kind
属性。
参考¶
- class PremakeToolchain(conanfile)¶
PremakeToolchain 生成器
- 参数:
conanfile –
< ConanFile object >
当前配方对象。始终使用self
。
- extra_cxxflags¶
额外的
CXX
标志列表。添加到buildoptions
。
- extra_cflags¶
额外的
C
标志列表。添加到buildoptions
。
- extra_ldflags¶
额外的链接器标志列表。添加到
linkoptions
。
- extra_defines¶
额外的预处理器定义列表。添加到
defines
。
- project(project_name)¶
返回的对象也将具有与 workspace 相同的属性,但仅影响具有指定名称的项目。 :param project_name: 要更新的 workspace 内项目的名称。 :return:
<PremakeProject>
对象,允许设置项目特定标志。
- generate()¶
创建
conantoolchain.premake5.lua
文件,该文件将根据工具链配置正确配置构建路径、二进制路径、配置设置以及编译器/链接器标志。