瀏覽代碼

automoc: silence linker warning on macos

when an empty `mocs_compilation.cpp` is included in a static library,
the macos linker emits a warning:
```
/Applications/Xcode13.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib:
file: path/To/Library.a(mocs_compilation.cpp.o) has no symbols
```

we therefore generate a globally visible weak symbol in the form of a
virtual function table
Tim Blechmann 3 年之前
父節點
當前提交
4a9daae483
共有 1 個文件被更改,包括 8 次插入1 次删除
  1. 8 1
      Source/cmQtAutoMocUic.cxx

+ 8 - 1
Source/cmQtAutoMocUic.cxx

@@ -2175,7 +2175,14 @@ void cmQtAutoMocUicT::JobMocsCompilationT::Process()
     // Placeholder content
     content += "// No files found that require moc or the moc files are "
                "included\n"
-               "enum some_compilers { need_more_than_nothing };\n";
+               "struct cmake_automoc_silence_linker_warning{\n"
+               "    virtual ~cmake_automoc_silence_linker_warning();\n"
+               "};\n"
+               "\n"
+               "inline "
+               "cmake_automoc_silence_linker_warning::"
+               "~cmake_automoc_silence_linker_warning()\n"
+               "{}\n";
   } else {
     // Valid content
     const bool mc = this->BaseConst().MultiConfig;