Tencent/ScriptX

在同一次构建中更换编译开关重复构建ScriptX时报错

yqs112358 opened this issue · 7 comments

本来打算在同一次构建中对每种语言分别生成一个Target的输出
每次include( ScriptX/CMakeLists.txt )前先修改SCRIPTX_BACKEND
结果cmake报错
CMake Error at src/ScriptX/CMakeLists.txt:50 (add_library):
[cmake] add_library cannot create target "ScriptX" because another target with the
[cmake] same name already exists. The existing target is a static library created
[cmake] in source directory
也就是说在同一次构建中不能有两个同名对象
那该如何实现同时构建多种语言的多个target呢
或者有无办法实现构建完一个target后执行clean

结论,同一次构建是不支持多个backend的。
这也是编译时多态除了高性能之外的结果。

如果一定要这么做的话,有个方法是编译多个动态库,每一个动态库链接一个target

不过还有一个cmake的限制,这两个动态库必须用两个CMakeLists配置

我在两个不同的backend编译时确实用的是不同的CMakeList
他们在不同的目录中
最后由最顶层的CMakeList使用add_subdirectory进行分别构建
结果仍然出现了这个问题
难道说必须要修改ScriptX自带的CMakeList中的Project名才可以解决问题吗。。。

我看到ScriptX里面写的是add_library(ScriptX STATIC
把他改成动态库就可以解决问题了?

不是的,你不能用一个cmake工程编译两个后端。
只能用两个cmake工程(顶层CMakeLists)

其实我也很好奇你有什么样的需求,需要同时编译多个后端

哈!
其实就是做一个多语言的插件加载器
一次构建同时生成多种语言对应的DLL

所以说得多个顶层CMakeLists咯😱那样到时候构建就麻烦了
虽然说可以靠bat。。。hhh