diff --git a/cmake/macros/Python.cmake b/cmake/macros/Python.cmake index cb8edad227..959e24c861 100644 --- a/cmake/macros/Python.cmake +++ b/cmake/macros/Python.cmake @@ -51,7 +51,14 @@ function(add_python_target target) target_link_libraries(${target} PKG::PYTHON) if(BUILD_SHARED_LIBS) - set(_outdir "${PROJECT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${slash_namespace}") + if(CMAKE_GENERATOR STREQUAL "Xcode") + # This is explained in CompilerFlags.cmake + set(intdir $$(EFFECTIVE_PLATFORM_NAME)) + else() + set(intdir ${CMAKE_CFG_INTDIR}) + endif() + + set(_outdir "${PROJECT_BINARY_DIR}/${intdir}/${slash_namespace}") set_target_properties(${target} PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${_outdir}" diff --git a/dtool/CompilerFlags.cmake b/dtool/CompilerFlags.cmake index 644135dd72..ba8e5a829d 100644 --- a/dtool/CompilerFlags.cmake +++ b/dtool/CompilerFlags.cmake @@ -29,9 +29,19 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) # Set up the output directory structure, mimicking that of makepanda set(CMAKE_BINARY_DIR "${CMAKE_BINARY_DIR}/cmake") -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/bin") -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib") -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/lib") + +if(CMAKE_GENERATOR STREQUAL "Xcode") + # On the Xcode generator, CMake generates a separate make target definition for + # every config, so it ends up spamming warnings once we try to build. + set(intdir $$(EFFECTIVE_PLATFORM_NAME)) +else() + set(intdir ${CMAKE_CFG_INTDIR}) +endif() + +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${intdir}/bin") +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${intdir}/lib") +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${intdir}/lib") + set(MODULE_DESTINATION "lib") # Runtime code assumes that dynamic modules have a "lib" prefix; Windows