Visual Studio — Как я могу изменить компилятор и CXX_FLAGS для CMAKE проекта C ++?

I'm currently working on an unmanaged Windows C++ application.
I'm new to the world of CMAKE and C++.
I'm also new to the world of this current unmanaged C++ application.
I'm trying to integrate DevPartner into my build to instrument the build
for memory errors and runtime errors.

Чтобы собрать инструментальные средства, мне нужно перейти на использование компилятора DevPartner (nmcl.exe).
Кроме того, мне нужно добавить настройки компилятора в существующий CXX_FLAGS для инструментовки.

Как мне это сделать?

Спасибо,
Johnb

0

Решение

Для версий VS 2008 и более ранних версий …. (кроме VS6 он использует msdev)

Хорошо копаясь больше в cmake, я скажу, что кто-то с большим знанием сможет взять это и бежать с этим.

Я обнаружил, что команды CL и LINK действительно ничего не делают, так как это только запускает Devenv для VS2003 до 2008 и MSBuild для VS2010. Изменение CL на NMCL не будет иметь значения, так как MSBuild использует целевые файлы, поэтому мой другой ответ требует изменения пользовательских файлов. И почему нам нужно использовать другой инструмент здесь.

Devenv, вызванный с / Build, внутренне использует файлы проекта, чтобы знать, какие исходные файлы нужно собрать. Затем он вызовет createprocess для внутреннего вызова CL и LINK по мере необходимости. Вот почему замена CL на NMCL в файлах cmake бесполезна.

К счастью, у нас есть еще один инструмент, который можно использовать здесь ….

Нам нужно изменить
// сделать программу
CMAKE_MAKE_PROGRAM: FILEPATH = C: / Программные файлы (x86) / Общие файлы / Микрофокус / NMShared / CTI / 11.1 / NMdevenv.EXE

а также
CMAKE_BUILD_TOOL: INTERNAL = е: /PROGRA~1/MICROS~2.0/Common7/IDE/devenv.com

в C: / Программные файлы (x86) / Общие файлы / Micro Focus / NMShared / CTI / 11.1 / NMdevenv.EXE

Теперь это место, где нужен кто-то, имеющий немного больше знаний. Нам также нужно передать тип инструментовки в nmdevenv в качестве 1-х параметров.

Я верю, что это можно сделать примерно так

набор (CMAKE_MAKE_PROGRAM «$ {CMAKE_MAKE_PROGRAM}» / nmon «)

Еще одна проблема заключается в том, что нам нужен devenv, чтобы быть в пути, поэтому переменная Path env также должна быть установлена ​​правильно. Это можно сделать, запустив правильный файл vscvars bat.

Надеюсь, что это поможет, и если вы используете vs2008 и предыдущие версии, добавьте шаги, необходимые для того, что я начал здесь. Я уверен, что это поможет другим пользователям в долгосрочной перспективе. Если у меня будет больше времени для расследования, я найду способ сделать это.

редактировать
Ну, мне удалось заставить это работать с VS2008. Мне пришлось внести изменения в нашу оболочку nmdevenv, так как cmake уничтожил нашу функциональность SearchPath.

Вот что я сделал.
Заменили программу make, как указано выше
Побежал VCVars32
Запустил cmake — построить mytestproj
Запустил программу под BounsChecker

Теперь я переключился на / nmtxon для профилирования производительности
Это поставило меня в тупик, так как он продолжал компилироваться для обнаружения ошибок

И именно тогда я нашел это в преобразованных файлах проекта

        <Tool
Name="VCCLCompilerTool"AdditionalOptions=" /NMbcon /Zm1000"

Изменил это на

и все хорошо. У меня была опция скомпилированного исполнения.

Поэтому я вернулся и изменил эту строку в файле CMakeCache.txt, открыл графический интерфейс, настроил, сгенерировал
// Флаги, используемые компилятором во всех типах сборки.
CMAKE_CXX_FLAGS: STRING = / NMbcon / DWIN32 / D_WINDOWS / W3 / Zm1000 / EHsc / GR

Затем проект снова переключился на использование / NMbcon. Так что это правильное место для переключения, если вы хотите скомпилировать все с нами. В противном случае используйте соответствующую строку Debug или release.


часть вывода Cmake
Извещение о приборе на выходе

Microsoft (R) Visual Studio Version 9.0.30729.1.
Copyright (C) Microsoft Corp. All rights reserved.
1>------ Build started: Project: Test, Configuration: Debug Win32 ------
1>Compiling...
New Command line nmcl.exe /NMtxon  @e:\cust\Test3\Test\Test.dir\Debug\RSP0000011
2568792.rsp /nologo /errorReport:queue
1>Test3.cpp
1>Instrumenting ..\Test3\Test3.cpp
1>Compiling manifest to resources...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.7600.16385
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>Linking...

В итоге

Используйте Cmake для генерации CMakeCache.txt и каталогов
Изменить CmakeCahe
Используйте NMDevenv в качестве программы MAKE
Добавить / NMon переключатель на флаги
запустить CmakeGui и сгенерировать снова

Запустите VCVars32
Запустите файл cmake —build

Запустите программу под devpartner

1

Другие решения

Какую версию Visual Studio вы используете? Это имеет большое значение, так как управление инструментами изменилось за эти годы. , , не столько по версии DevPartner, сколько по версии Visual Studio.

0

Не уверен на 100% для файла cmake, но это из старого make-файла VS 6, модифицированного для Devpartner. Возможно, вы можете опубликовать соответствующий раздел make-файла, чтобы я мог на него посмотреть.

/ nmbcon — это флаг компиляции, который говорит, что использование BC инструментовки / nmtxon будет использоваться для анализа покрытия

CPP = cl.exe

CPP_PROJ = / nologo / MD / W3 / Gm / GX / Zi / Od / D «WIN32» / D «NDEBUG» / D «_WINDOWS» / D «_WINDLL» / D «_AFXDLL» / D «_MBCS» / D «_AFXEXT «/Fp»$(INTDIR)\main.pch» /Yu»stdafx.h «/ Fo» $ (INTDIR) \ «/Fd»..\bin\Debug\MAIN.pdb» / FD / GZ / c

Станет

CPP = nmcl.exe

CPP_PROJ = / nmbcon / nologo / MD / W3 / Gm / GX / Zi / Od / D «WIN32» / D «NDEBUG» / D «_WINDOWS» / D «_WINDLL» / D «_AFXDLL» / D «_MBCS» / D «_AFXEXT» /Fp»$(INTDIR)\main.pch «/Yu»stdafx.h» / Fo «$ (INTDIR) \» /Fd»..\bin\Debug\MAIN.pdb «/ FD / GZ / с

Да, и другой постер — это правильные вещи, которые сильно изменились в зависимости от версии Visual Studio. VS2010 изменил процесс сборки для использования MSBuild, поэтому мы полностью изменили способ перехвата и установки для VS2010 и 2012.

*РЕДАКТИРОВАТЬ

Ну, я сделал скачать и пройти через боль Cmake стажировки сегодня утром. Для VS2010 это, кажется, довольно простая модификация, точно такая же, как и для одного из наших пользователей, использующих MSBuild из командной строки.

В выходном каталоге «Где собрать двоичные файлы» после первой сборки будут файлы .vcxproj.user. Это где вы должны добавить флаги для инструментовки

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<DevPartner_IsInstrumented>1</DevPartner_IsInstrumented>
<DevPartner_Instrumented_Type> /NMbcOn</DevPartner_Instrumented_Type>
</PropertyGroup>
</Project>

Это может быть повторяющимся разделом для каждого
что вы хотите построить.

Следующий ключ DevPartner_IsInstrumented говорит нам инструменту (1) или нет (0).
Последний ключ DevPartner_Instrumented_Type> указывает, какой тип был передан Instrumetnt / nmbcon (Boundschecker) / nmtxon (Performance или Coverage) или оба ключа переданы.

Так это может выглядеть

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<DevPartner_IsInstrumented>1</DevPartner_IsInstrumented>
<DevPartner_Instrumented_Type> /NMbcOn</DevPartner_Instrumented_Type>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<DevPartner_IsInstrumented>0</DevPartner_IsInstrumented>
<DevPartner_Instrumented_Type> /NMbcOn</DevPartner_Instrumented_Type>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<DevPartner_IsInstrumented>0</DevPartner_IsInstrumented>
<DevPartner_Instrumented_Type> /NMbcOn</DevPartner_Instrumented_Type>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<DevPartner_IsInstrumented>1</DevPartner_IsInstrumented>
<DevPartner_Instrumented_Type> /NtxcOn</DevPartner_Instrumented_Type>
</PropertyGroup>
</Project>

это будет Boundschecker для отладки win32, ничего для выпуска win32, ничего для отладки x64 и Performance / Coverage для выпуска x64

Если IsInstrumented 0, все, что находится в типе, не будет иметь значения, так как оно не будет передано.

К вашему сведению, если вы откроете решение в VS2010 и включите инструментарий, он будет добавлен в файлы vcxproj.user для вас. И настройки инструментовки являются проектом / конфигурацией также.

Если не использовать VS2010, моя заметка ниже может быть правильной для этих версий.

Для полного раскрытия я являюсь ведущим разработчиком по инструментальному движку для DevPartner.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector