Как добавить свойство для анализа кода Affect в CMake - PullRequest
1 голос
/ 09 января 2020

Основываясь на этом ответе , я добавил приведенный ниже код в мой файл .vcxproj, который удаляет большинство предупреждений, которые я получал от включаемых файлов Qt, и его автоматически сгенерированных файлов mo c .

<PropertyGroup Condition="'$(Language)'=='C++'">
  <CAExcludePath>C:\Qt\5.13.1\msvc2017_64\include;.\ProjectName_autogen;$(CAExcludePath)</CAExcludePath>
</PropertyGroup>

Это отлично подходит для одного указанного c проекта, но, поскольку я использую CMake, на нескольких компьютерах он будет перезаписываться при каждом изменении файла CMake, и мне придется добавить его в каждый проект мне нужен (есть 3 проекта, которые используют Qt). Конечно, проблема также в том, что если я изменю путь Qt, мне также потребуется обновить файлы проекта.

Мне интересно, есть ли свойство CMake, которое я могу установить, чтобы добавить его в проекты? Я знаю, как получить каталог включения Qt, просто ища свойство CMake, чтобы фактически установить CAExcludePath. Если это помогает, я использую VS 2019, и это для отключения предупреждений из анализа кода.

Я проверил страницу cmake-properties , но не нашел никаких предопределенных свойства, которые кажутся подходящими.

1 Ответ

1 голос
/ 09 января 2020

Я понял это. Для всех, кто заинтересовался, я создал файл с именем user.props, который выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Condition="'$(Language)'=='C++'">
    <CAExcludePath>@QWT_INCLUDE_DIR@;@QT_INCLUDE_DIR@;.;$(CAExcludePath)</CAExcludePath>
  </PropertyGroup>
</Project>

Затем в файле CMakeList.txt root у меня есть

SET( RULESET_PATH ${CMAKE_CURRENT_BINARY_DIR}/user.props )
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/user.props ${RULESET_PATH} @ONLY)

Затем для каждого проекта, к которому я хочу применить его, у меня есть

SET_PROPERTY( TARGET "ProjectName" PROPERTY VS_USER_PROPS "${RULESET_PATH}" )

Возможно, есть более прямой путь, но это работает.

...