Xcode: source file property LANGUAGE OBJCXX is not taken into account
using the LANGUAGE
property to set the language to objective-c++ does not work with xcode
cmake_minimum_required(VERSION 3.16)
project(test VERSION 0.1.0 LANGUAGES C CXX OBJC OBJCXX)
set_source_files_properties(foo.m PROPERTIES LANGUAGE OBJCXX)
set_source_files_properties(bar.m PROPERTIES LANGUAGE OBJCXX)
add_executable(foo foo.m)
target_sources(foo PUBLIC bar.m)
compiles with -x objective-c++
on ninja
[1/3] /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -isysroot /Applications/Xcode11.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -std=gnu++98 -MD -MT CMakeFiles/foo.dir/foo.m.o -MF CMakeFiles/foo.dir/foo.m.o.d -x objective-c++ -o CMakeFiles/foo.dir/foo.m.o -c ../foo.m
[2/3] /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -isysroot /Applications/Xcode11.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -std=gnu++98 -MD -MT CMakeFiles/foo.dir/bar.m.o -MF CMakeFiles/foo.dir/bar.m.o.d -x objective-c++ -o CMakeFiles/foo.dir/bar.m.o -c ../bar.m
but with xcode it is compiled as obj-c (-x objective-c
)
CompileC c/test.build/Debug/foo.build/Objects-normal/x86_64/bar.o bar.m normal x86_64 objective-c com.apple.compilers.llvm.clang.1_0.compiler
cd /Users/tim/dev/cmake_test
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c -target x86_64-apple-macos10.15 -fmessage-length=318 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -fcolor-diagnostics -Wno-trigraphs -fpascal-strings -O0 -Wno-missing-field-initializers -Wno-missing-prototypes -Wno-return-type -Wno-implicit-atomic-properties -Wno-objc-interface-ivars -Wno-arc-repeated-use-of-weak -Wno-missing-braces -Wparentheses -Wswitch -Wno-unused-function -Wno-unused-label -Wno-unused-parameter -Wno-unused-variable -Wunused-value -Wno-empty-body -Wno-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wno-constant-conversion -Wno-int-conversion -Wno-bool-conversion -Wno-enum-conversion -Wno-float-conversion -Wno-non-literal-null-conversion -Wno-objc-literal-conversion -Wno-shorten-64-to-32 -Wpointer-sign -Wno-newline-eof -Wno-selector -Wno-strict-selector-match -Wno-undeclared-selector -Wno-deprecated-implementations -DCMAKE_INTDIR=\"Debug\" -DOBJC_OLD_DISPATCH_PROTOTYPES=1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -fasm-blocks -fstrict-aliasing -Wprotocol -Wdeprecated-declarations -g -Wno-sign-conversion -Wno-infinite-recursion -Wno-comma -Wno-block-capture-autoreleasing -Wno-strict-prototypes -Wno-semicolon-before-method-body -I/Users/tim/dev/cmake_test/c/Debug/include -I/Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/DerivedSources-normal/x86_64 -I/Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/DerivedSources/x86_64 -I/Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/DerivedSources -Wmost -Wno-four-char-constants -Wno-unknown-pragmas -F/Users/tim/dev/cmake_test/c/Debug -MMD -MT dependencies -MF /Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/Objects-normal/x86_64/bar.d --serialize-diagnostics /Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/Objects-normal/x86_64/bar.dia -c /Users/tim/dev/cmake_test/bar.m -o /Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/Objects-normal/x86_64/bar.o
CompileC c/test.build/Debug/foo.build/Objects-normal/x86_64/foo.o foo.m normal x86_64 objective-c com.apple.compilers.llvm.clang.1_0.compiler
cd /Users/tim/dev/cmake_test
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c -target x86_64-apple-macos10.15 -fmessage-length=318 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -fcolor-diagnostics -Wno-trigraphs -fpascal-strings -O0 -Wno-missing-field-initializers -Wno-missing-prototypes -Wno-return-type -Wno-implicit-atomic-properties -Wno-objc-interface-ivars -Wno-arc-repeated-use-of-weak -Wno-missing-braces -Wparentheses -Wswitch -Wno-unused-function -Wno-unused-label -Wno-unused-parameter -Wno-unused-variable -Wunused-value -Wno-empty-body -Wno-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wno-constant-conversion -Wno-int-conversion -Wno-bool-conversion -Wno-enum-conversion -Wno-float-conversion -Wno-non-literal-null-conversion -Wno-objc-literal-conversion -Wno-shorten-64-to-32 -Wpointer-sign -Wno-newline-eof -Wno-selector -Wno-strict-selector-match -Wno-undeclared-selector -Wno-deprecated-implementations -DCMAKE_INTDIR=\"Debug\" -DOBJC_OLD_DISPATCH_PROTOTYPES=1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -fasm-blocks -fstrict-aliasing -Wprotocol -Wdeprecated-declarations -g -Wno-sign-conversion -Wno-infinite-recursion -Wno-comma -Wno-block-capture-autoreleasing -Wno-strict-prototypes -Wno-semicolon-before-method-body -I/Users/tim/dev/cmake_test/c/Debug/include -I/Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/DerivedSources-normal/x86_64 -I/Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/DerivedSources/x86_64 -I/Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/DerivedSources -Wmost -Wno-four-char-constants -Wno-unknown-pragmas -F/Users/tim/dev/cmake_test/c/Debug -MMD -MT dependencies -MF /Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/Objects-normal/x86_64/foo.d --serialize-diagnostics /Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/Objects-normal/x86_64/foo.dia -c /Users/tim/dev/cmake_test/foo.m -o /Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/Objects-normal/x86_64/foo.o
if i explicitly set the obj-c++ language flags:
set_source_files_properties(foo.m bar.m PROPERTIES COMPILE_OPTIONS -xobjective-c++)
i end up with
CompileC c/test.build/Debug/foo.build/Objects-normal/x86_64/bar.o bar.m normal x86_64 objective-c++ com.apple.compilers.llvm.clang.1_0.compiler
cd /Users/tim/dev/cmake_test
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c++ -target x86_64-apple-macos10.15 -fmessage-length=318 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -fcolor-diagnostics -Wno-trigraphs -fpascal-strings -O0 -Wno-missing-field-initializers -Wno-missing-prototypes -Wno-return-type -Wno-implicit-atomic-properties -Wno-objc-interface-ivars -Wno-arc-repeated-use-of-weak -Wno-non-virtual-dtor -Wno-overloaded-virtual -Wno-exit-time-destructors -Wno-missing-braces -Wparentheses -Wswitch -Wno-unused-function -Wno-unused-label -Wno-unused-parameter -Wno-unused-variable -Wunused-value -Wno-empty-body -Wno-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wno-constant-conversion -Wno-int-conversion -Wno-bool-conversion -Wno-enum-conversion -Wno-float-conversion -Wno-non-literal-null-conversion -Wno-objc-literal-conversion -Wno-shorten-64-to-32 -Wno-newline-eof -Wno-selector -Wno-strict-selector-match -Wno-undeclared-selector -Wno-deprecated-implementations -Wno-c++11-extensions -DCMAKE_INTDIR=\"Debug\" -DOBJC_OLD_DISPATCH_PROTOTYPES=1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -fasm-blocks -fstrict-aliasing -Wprotocol -Wdeprecated-declarations -Winvalid-offsetof -g -Wno-sign-conversion -Wno-infinite-recursion -Wno-move -Wno-comma -Wno-block-capture-autoreleasing -Wno-strict-prototypes -Wno-range-loop-analysis -Wno-semicolon-before-method-body -I/Users/tim/dev/cmake_test/c/Debug/include -I/Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/DerivedSources-normal/x86_64 -I/Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/DerivedSources/x86_64 -I/Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/DerivedSources -Wmost -Wno-four-char-constants -Wno-unknown-pragmas -F/Users/tim/dev/cmake_test/c/Debug -std=gnu++98 -xobjective-c++ -MMD -MT dependencies -MF /Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/Objects-normal/x86_64/bar.d --serialize-diagnostics /Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/Objects-normal/x86_64/bar.dia -c /Users/tim/dev/cmake_test/bar.m -o /Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/Objects-normal/x86_64/bar.o
CompileC c/test.build/Debug/foo.build/Objects-normal/x86_64/foo.o foo.m normal x86_64 objective-c++ com.apple.compilers.llvm.clang.1_0.compiler
cd /Users/tim/dev/cmake_test
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c++ -target x86_64-apple-macos10.15 -fmessage-length=318 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 -fcolor-diagnostics -Wno-trigraphs -fpascal-strings -O0 -Wno-missing-field-initializers -Wno-missing-prototypes -Wno-return-type -Wno-implicit-atomic-properties -Wno-objc-interface-ivars -Wno-arc-repeated-use-of-weak -Wno-non-virtual-dtor -Wno-overloaded-virtual -Wno-exit-time-destructors -Wno-missing-braces -Wparentheses -Wswitch -Wno-unused-function -Wno-unused-label -Wno-unused-parameter -Wno-unused-variable -Wunused-value -Wno-empty-body -Wno-uninitialized -Wno-unknown-pragmas -Wno-shadow -Wno-four-char-constants -Wno-conversion -Wno-constant-conversion -Wno-int-conversion -Wno-bool-conversion -Wno-enum-conversion -Wno-float-conversion -Wno-non-literal-null-conversion -Wno-objc-literal-conversion -Wno-shorten-64-to-32 -Wno-newline-eof -Wno-selector -Wno-strict-selector-match -Wno-undeclared-selector -Wno-deprecated-implementations -Wno-c++11-extensions -DCMAKE_INTDIR=\"Debug\" -DOBJC_OLD_DISPATCH_PROTOTYPES=1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk -fasm-blocks -fstrict-aliasing -Wprotocol -Wdeprecated-declarations -Winvalid-offsetof -g -Wno-sign-conversion -Wno-infinite-recursion -Wno-move -Wno-comma -Wno-block-capture-autoreleasing -Wno-strict-prototypes -Wno-range-loop-analysis -Wno-semicolon-before-method-body -I/Users/tim/dev/cmake_test/c/Debug/include -I/Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/DerivedSources-normal/x86_64 -I/Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/DerivedSources/x86_64 -I/Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/DerivedSources -Wmost -Wno-four-char-constants -Wno-unknown-pragmas -F/Users/tim/dev/cmake_test/c/Debug -std=gnu++98 -xobjective-c++ -MMD -MT dependencies -MF /Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/Objects-normal/x86_64/foo.d --serialize-diagnostics /Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/Objects-normal/x86_64/foo.dia -c /Users/tim/dev/cmake_test/foo.m -o /Users/tim/dev/cmake_test/c/test.build/Debug/foo.build/Objects-normal/x86_64/foo.o
(although -x objective-c++
is passed twice)
Edited by Brad King