xmake-io / xmake

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

Set C++ language and CUDA language separately #3721

Open xq114 opened 1 year ago

xq114 commented 1 year ago

你在什么场景下需要该功能?

https://github.com/fmtlib/fmt/issues/3394

由于NVCC的bug,cuda中开了-std=c++20 string literal就无法工作,从而无法使用fmt库。解决办法是cpp文件继续使用c++20,但cuda文件使用c++17. 然而xmake中不支持对cuda language单独设置,因此只能使用add_cxflags单独设置language flags并且对每个平台独立判断,非常不方便。

描述可能的解决方案

增加add_languages("cuda17")等,在nvcc编译时优先使用cuda的language standard,如果没有设置则fallback到c++ standard

描述你认为的候选方案

No response

其他信息

No response

waruqi commented 1 year ago

可以用 add_cuflags("-std=c++17") 单独对 cuda 设置的,没必要为此单独定义一套 language 出来。

xq114 commented 1 year ago

这样不会和set_languages("cxx20")冲突吗?

waruqi commented 1 year ago

有可能会,靠右边的 flags 会覆盖之前的,就看哪个被后加了。。要么就是遇到这种的,你 c++ 也用 add_cxflags 设置,就不会完全冲突了。

不过新增 cuda17 的话,要改的地方太多,还得对各种 project generator 也得额外改动支持。。也很麻烦的,仅仅只是为了处理一个 cuda 的 bug

waruqi commented 1 year ago

或者可以试下

    add_files("src/*.cu", {languages = "c++17"})
    set_languages("c++20")