静态库和动态库的编译切换
原文链接 https://waruqi.github.io/2016/08/03/switch-library-kind.cn/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
如果你想在同一个target上既编译静态库,又能编译动态库,那么稍微修改下 xmale.lua就行了:
add_target("test")
-- 设置编译target的类型,之前是:static/shared,现在改成动态的
set_kind("$(kind)")
-- 添加文件
add_files(*.c)
好了,现在默认编译的时候,会生成静态库:libtest.a
如果你想生成动态库,只需要执行:
# 简写
xmake f -k shared
# 或者
xmake config --kind=shared
# 编译
xmake
配置成动态库模式,重建下就行了。。参数:-k/--kind
可以手动在配置的时候指定,需要编译的target类型,实际会去影响:
set_kind("$(kind)")
中的$(kind)的配置变量。。
如果你想在target针对static/shared类型,分别处理不同的宏开关,也可以使用 if kinds("static") then
来判断
add_target("test")
-- 设置编译target的类型,之前是:static/shared,现在改成动态的
set_kind("$(kind)")
-- 添加文件
add_files(*.c)
-- 如果是动态库,则定义宏:SHARED
if kinds("shared") then
add_defines("SHARED")
end
上面说的 -k/--kind
配置参数,是xmake内置参数,影响当前工程的所有指定了 $(kind)
的target,如果觉得这样影响面太广,我想让不同的target,在不同的时机切换编译静态库和动态库,可以使用option的接口,自定义一个配置参数:
-- 自定义一个配置参数
add_option("mykind")
set_option_showmenu(true)
set_option_description("Set my target kind: static or shared")
add_target("test")
-- 设置编译target的类型,使用 xmake --mykind=static参数
set_kind("$(mykind)")
-- 添加文件
add_files(*.c)
这样,只需要执行xmake f --mykind=shared
就可以使用自己的配置参数,进行切换编译类型了。。