xmake-io / xmake

🔥 A cross-platform build utility based on Lua
https://xmake.io
Apache License 2.0
10.04k stars 785 forks source link

同一project下不同的target混用vc/gcc/clang #960

Closed yanghuan closed 4 years ago

yanghuan commented 4 years ago

描述问题

同一project下不同的target混用vc/gcc/clang,先编译使用vc的target, 在编译使用clang的target,在编译vc的target发现仍然使用clang在进行编译

期待的结果

能正确调用对应编译器

相关环境

其他信息

例如使用如下编译配置

target("outcpp")
  set_toolset("cxxflags", "/permissive-")
  set_targetdir("$(buildir)/vc/$(host)/$(mode)/$(arch)")
  set_objectdir("$(buildir)/vc/.objs")
  set_dependir("$(buildir)/vc/.deps")
  set_kind("binary")
  add_packages("boost")
  add_includedirs("..", {public = true})
  add_includedirs(".")
  add_files("../rt/**.cpp", "**.cpp")

target("outcpp-gcc")
  set_toolset("cc", "gcc")
  set_toolset("cxx", "gcc")
  set_toolset("ld", "g++")
  set_targetdir("$(buildir)/gcc/$(host)/$(mode)/$(arch)")
  set_objectdir("$(buildir)/gcc/.objs")
  set_dependir("$(buildir)/gcc/.deps")
  set_kind("binary")
  add_packages("boost")
  add_includedirs("..", {public = true})
  add_includedirs(".")
  add_files("../rt/**.cpp", "**.cpp")

target("outcpp-clang")
  set_toolset("cc", "clang")
  set_toolset("cxx", "clang")
  set_toolset("ld", "clang++")
  set_targetdir("$(buildir)/clang/$(host)/$(mode)/$(arch)")
  set_objectdir("$(buildir)/clang/.objs")
  set_dependir("$(buildir)/clang/.deps")
  set_kind("binary")
  add_packages("boost")
  add_includedirs("..", {public = true})
  add_includedirs(".")
  add_files("../rt/**.cpp", "**.cpp")
waruqi commented 4 years ago

使用 set_toolchains("clang") 试试

yanghuan commented 4 years ago

修改后还是有问题,发现删除 .make 目录切换target后可以正常编译,好像是 .make/windows/x64/make.conf 里面的配置信息有在切换target后有问题

waruqi commented 4 years ago

工具链的使用是有配置缓存的,默认检测之前的工具链会缓存使用,如果要切工具链,请先追加 -c 忽略缓存配置。

xmake f -c
xmake
yanghuan commented 4 years ago

好像每次切换targe后,都需要输入 xmake f -c, 我是在vs code上使用的,有能在lua代码里面控制的方式吗

waruqi commented 4 years ago

不能,切target 应该不需要,vscode里面只要 xmake.lua 有改动就会自动触发 -c,平台和架构的切换也会自动触发 或者 vscode 的 command 面板里面也有 XMake:CleanConfiguration的命令可以用。

yanghuan commented 4 years ago

xmake.lua 是没有改动的,build 不同的taetget, 是使用不同的toolchains,好像不会自动触发-c

waruqi commented 4 years ago

xmake.lua 是没有改动的,build 不同的taetget, 是使用不同的toolchains,好像不会自动触发-c

这个目前是不会的,只有我刚说的那些场景才会触发,切换toolchains 需要手动追加 -c

yanghuan commented 4 years ago

好的,了解了,多谢解答