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()
生成的文件¶
PremakeToolchain
在执行 conan install(或在缓存中构建包时)后会生成 conantoolchain.premake5.lua
文件,该文件包含 generate()
方法中提供的信息以及从当前 settings
、conf
等转换而来的信息。
Premake 不提供任何 API 来交互、注入或修改构建脚本。此外,Premake 没有工具链的概念,因此遵循 Premake 维护者的指示(参见 Premake 讨论),由于 Premake 是基于 Lua 脚本构建的,Conan 生成的文件是一个 Lua 脚本,它将覆盖原始的 Premake 脚本并添加以下信息:
从 Conan 设置中检测
buildtype
。根据需要定义 C++ 标准。
根据需要定义 C 标准。
根据 Conan 配置文件和操作系统检测 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)¶
返回的对象也将具有与工作区相同的属性,但仅影响具有该名称的项目。 :param project_name: 工作区中要更新的项目的名称。 :return:
<PremakeProject>
对象,允许设置项目特定的标志。
- generate()¶
创建一个
conantoolchain.premake5.lua
文件,该文件将根据工具链配置正确配置构建路径、二进制路径、配置设置以及编译器/链接器标志。