cmake_minimum_required(VERSION 3.5) project(Architecture C) function(test_for_xcode4 result_var) set(${result_var} 0 PARENT_SCOPE) if(APPLE) execute_process(COMMAND xcodebuild -version OUTPUT_VARIABLE ov RESULT_VARIABLE rv ) if("${rv}" STREQUAL "0" AND ov MATCHES "^Xcode ([0-9]+)\\.") if(NOT CMAKE_MATCH_1 VERSION_LESS 4) set(${result_var} 1 PARENT_SCOPE) endif() endif() endif() endfunction() test_for_xcode4(is_xcode4) set(arch0 i386) set(arch1 ppc) if(is_xcode4) # Xcode 4, use modern architectures as defaults # Arch 'ppc' no longer works: tools no longer available starting with Xcode 4 set(arch0 i386) set(arch1 x86_64) endif() add_library(foo foo.c) if(CMAKE_OSX_ARCHITECTURES) get_property(archs TARGET foo PROPERTY OSX_ARCHITECTURES) if(NOT "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "${archs}") message(FATAL_ERROR "OSX_ARCHITECTURES property not initialized by CMAKE_OSX_ARCHITECTURES.\n" "Expected [${CMAKE_OSX_ARCHITECTURES}], got [${archs}]." ) endif() list(LENGTH archs archs_len) if(archs_len GREATER 1) list(GET archs 0 arch0) list(GET archs 1 arch1) endif() endif() message("is_xcode4='${is_xcode4}'") message("archs='${archs}'") message("arch0='${arch0}'") message("arch1='${arch1}'") set_property(TARGET foo PROPERTY OSX_ARCHITECTURES ${arch0}) set_property(TARGET foo PROPERTY OSX_ARCHITECTURES_DEBUG ${arch1}) add_executable(bar bar.c) target_link_libraries(bar foo) set_property(TARGET bar PROPERTY OUTPUT_NAME Architecture) set_property(TARGET bar PROPERTY OSX_ARCHITECTURES ${arch1}) set_property(TARGET bar PROPERTY OSX_ARCHITECTURES_DEBUG ${arch0})