Подтвердить что ты не робот

Какая переменная CMake используется для установки стандартной библиотеки С++ в XCode?

У меня есть чистая С++ 11 DLL (без каких-либо зависимостей). Я смог скомпилировать в Linux и Windows некоторое время, используя CMake для создания файлов проекта и make/MSVC для компиляции в каждом соответствующем система.

Я хочу скомпилировать на OSX сейчас, и у меня возникло множество проблем с получением CMake для установки правильных параметров проекта в XCode для компиляции DLL.

Версия программного обеспечения:

XCode v5.0
CMake v2.8.12

Соответствующий код CMake script:

# Set output directory if Apple OSX:
IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
    message("CMAKE HAS DETECTED A OSX SYSTEM - BUILDING FOR XCODE!")

    set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvm.clang.1_0")
    set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++0x")
    set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
    set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -std=c++0x -stdlib=libc++")

    IF(CMAKE_BUILD_TYPE MATCHES Release)
        SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../bin/OSX/Release)
    ENDIF(CMAKE_BUILD_TYPE MATCHES Release)
    IF(CMAKE_BUILD_TYPE MATCHES Debug)
        SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../bin/OSX/Debug)
    ENDIF(CMAKE_BUILD_TYPE MATCHES Debug)
ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")

Однако настройки не попадают в файл проекта XCode:

enter image description here

Вы можете видеть, что команды CMake пробиваются в область "Другие флаги С++". Но XCode все равно не скомпилируется. Однако, если я изменил переменную "Стандартная библиотека С++" на "libС++", она будет компилироваться отлично.

Примечание. Я могу опубликовать журналы ошибок компиляции, но я думаю, что приведенное выше правильно идентифицирует основную причину - мне просто нужно знать, какая команда CMake действительно устанавливает правильное свойство XCode выше.

4b9b3361

Ответ 1

Для минимального тестового проекта выполняется следующее задание:

SET(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")

Возможно, это мешает следующей строке:

set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -std=c++0x -stdlib=libc++")

Также одно замечание по этой строке, есть ли ${CMAKE_C_FLAGS} по намерению, или вы действительно имели в виду ${CMAKE_CXX_FLAGS}?

Ответ 2

вы можете использовать set_property

macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
set_property (TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY}
    ${XCODE_VALUE})
endmacro (set_xcode_property)

set_xcode_property(${your_target_name} CLANG_CXX_LANGUAGE_STANDARD "c++0x")
set_xcode_property(${your_target_name} CLANG_CXX_LIBRARY "libc++")