Objective C/C++: Unity builds depend on language initialization order
probably related to #21962
when initialising OBJC
before C
, x.m
will be unity-built x.c
in one translation unit
cmake_minimum_required(VERSION 3.19)
# project(foo LANGUAGES C CXX OBJC OBJCXX)
project(foo LANGUAGES OBJC OBJCXX C CXX)
add_executable(main x.m x.c x.mm x.cpp)
set_target_properties(main PROPERTIES UNITY_BUILD ON)
➜ build ninja -v
[1/4] /Applications/Xcode12.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -arch arm64 -isysroot /Applications/Xcode12.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -MD -MT CMakeFiles/main.dir/Unity/unity_0_cxx.cxx.o -MF CMakeFiles/main.dir/Unity/unity_0_cxx.cxx.o.d -o CMakeFiles/main.dir/Unity/unity_0_cxx.cxx.o -c CMakeFiles/main.dir/Unity/unity_0_cxx.cxx
[2/4] /Applications/Xcode12.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -arch arm64 -isysroot /Applications/Xcode12.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -MD -MT CMakeFiles/main.dir/Unity/unity_0_c.c.o -MF CMakeFiles/main.dir/Unity/unity_0_c.c.o.d -o CMakeFiles/main.dir/Unity/unity_0_c.c.o -c CMakeFiles/main.dir/Unity/unity_0_c.c
[3/4] /Applications/Xcode12.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -x objective-c++ -arch arm64 -isysroot /Applications/Xcode12.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk -std=gnu++98 -MD -MT CMakeFiles/main.dir/x.mm.o -MF CMakeFiles/main.dir/x.mm.o.d -o CMakeFiles/main.dir/x.mm.o -c ../x.mm
➜ build cat CMakeFiles/main.dir/Unity/unity_0_c.c
/* generated by CMake */
#include "/Users/tim/dev/cmake-objc-arch/x.m"
#include "/Users/tim/dev/cmake-objc-arch/x.c"