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

Добавить листы свойств Visual С++ с помощью CMake

В настоящее время я переношу gcc-проект на Visual С++. Он определен в файле CMake, и я создал лист свойств Visual С++, чтобы помочь в совместимости (GccCompat.props). Каждый раз, когда файлы проекта Visual С++ восстанавливаются CMake, лист свойств должен быть добавлен вручную, так как я не знаю, как его автоматически добавить. Итак, вопрос:

Как я могу сообщить CMake, чтобы добавить лист свойств в созданное решение Visual С++?

4b9b3361

Ответ 1

Этот вопрос немного стар, но я недавно наткнулся на ту же проблему, интегрируя GStreamer в свой проект. GStreamer поставляется с набором очень хорошо подготовленных и высококачественных Property Sheets, и я хотел использовать их вместо того, чтобы взламывать вещи в CMake.

К счастью, эта проблема ограничивается только Windows и Visual Studio. Итак, вот мое решение:

Идея заключается в использовании функции Visual Studio.user. CMake не создает этот файл, поэтому довольно безопасно его генерировать при настройке. Во время настройки вы можете создать файл с именем EXACT в качестве файла проекта, но заканчивающимся расширением .user.

Частичное решение:

Если ваш файл проекта имеет имя my_project.vcxproj, вам нужно создать другой файл рядом с ним под названием my_project.vcxproj.user. Согласно MSDN:

Пользовательский файл (.vcxproj.user) сохраняет пользовательские свойства, для например, параметры отладки и развертывания. Файл vcxproj.user применяется ко всем проектам для конкретного пользователя.

Содержимое этого файла для импорта листов свойств выглядит примерно так:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="/path/to/sheet1.props" />
  <Import Project="/path/to/sheet2.props" />
</Project>

Не безупречен, но работает до тех пор, пока CMake не начнет поддерживать листы свойств. Файл может быть создан с помощью команды CMake file при настройке времени.

Потенциальная оговорка:

Я заметил, что когда я добавляю листы свойств таким образом, иногда они не отображаются в окне Property Manager (может быть, ошибка в Visual Studio Community 2013), но они всегда импортируются должным образом, и зависимости разрешены правильно.

Ответ 2

Эта функциональность превратила ее в ночную сборку CMake (https://gitlab.kitware.com/cmake/cmake/commit/e390991846825799e619e072a28f1da58b7c89ba), хотя пока не в стабильном выпуске. Теоретически это будет в следующем выпуске, а выпуски CMake будут сделаны относительно часто.

Чтобы использовать, вы должны установить свойство VS_USER_PROPS в цель. Например. set_target_properties(foo PROPERTIES VS_USER_PROPS "${props_file}").

Однако, похоже, вы не можете использовать несколько свойств с этой опцией, и он заменяет файл свойств пользователя по умолчанию ($(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props). Чтобы обойти это, листы свойств могут включать в себя другие листы свойств, поэтому вы можете создать лист свойств "мастер", который включает любые другие листы свойств, которые вы хотели бы использовать (включая панель свойств пользователя по умолчанию).

Ответ 3

Не знаете, какие свойства вам нужны. Некоторые могут быть установлены непосредственно в CMake, как в этом примере для нескольких конфигураций:

set (CMAKE_CONFIGURATION_TYPES "A;B;C;D" CACHE STRING "Configurations" FORCE)

foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )

    set (CMAKE_CXX_FLAGS_${OUTPUTCONFIG}                "/ZI /Od")
    set (CMAKE_EXE_LINKER_FLAGS_${OUTPUTCONFIG}         "/debug")

endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )

Помимо переменных перечисленных здесь, я думаю, что у CMake нет возможности прикреплять листы свойств.