Добавить листы свойств Visual C ++ с помощью CMake - PullRequest
17 голосов
/ 04 июня 2010

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

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

Ответы [ 3 ]

7 голосов
/ 26 января 2017

Эта функциональность превратила его в ночную сборку 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 голосов
/ 10 октября 2015

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

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

Идея состоит в том, чтобы использовать .user файл в Visual Studio. 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 во время настройки.

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

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

0 голосов
/ 12 марта 2013

Не уверен, какие свойства вам нужны. Некоторые могут быть установлены непосредственно в 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 не имеет возможности прикреплять листы свойств.

...