質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

3520閲覧

Natvisをcmakeで認識してvsのprojectに追加する方法

yumetodo

総合スコア5850

CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/02/24 10:08

編集2018/02/24 14:56

Visual Studioのデバッガでの表示をカスタマイズするものとしてNatvisがあるわけですが、
Create custom views of native objects in the debugger | Microsoft Docs

.vcxprojでそれを追加して認識させるためには

<ItemGroup> <Natvis Include="inferior_vector.natvis" /> </ItemGroup>

のように追加すればいいとわかっています。

現在CMakeを使ってVSのプロジェクトを生成している都合上、CMakeで認識して上記のようなものを吐かせたいわけです。

CMake側での対応としては
Support natvis source file type in the MSVC Project Generator (#16043) · Issues · CMake / CMake · GitLab
というのがあって、CMake version 3.7.0に含まれているはずです。

しかしどうやって利用すればいいのかわかりません。

extension:cmake natvisGithubを調べてみても、

cmake

1SET_SOURCE_FILES_PROPERTIES(<natvis files> LANGUAGE natvis)

のようにしているものか、あとはadd_executableに直接渡している例が殆どで(他のはライブラリビルド時に含めるものなので今回は除外)それらはいずれも動きません(前者はなんの効果もなく、後者は認識されない拡張子で弾かれる)

${CMAKE_SOURCE_DIR}/../inferioir/vector/inferior_vector.natvisを認識させるにはどのように下記のスクリプトを書き換えればいいでしょうか?

cmake

1cmake_minimum_required(VERSION 3.7.0) 2enable_language(CXX) 3set(CMAKE_CXX_STANDARD 14) # C++14... 4set(CMAKE_CXX_STANDARD_REQUIRED ON) #...is required... 5set(CMAKE_CXX_EXTENSIONS OFF) #...without compiler extensions like gnu++11 6 7# 8# Set our project name 9# 10project(inferior_test) 11 12# 13# Source files 14# 15set(inferior_test_src 16 main.cpp 17) 18 19# 20# find inferior 21# 22include_directories(${CMAKE_SOURCE_DIR}/..) 23 24# 25# find iutest 26# 27if(EXISTS ${CMAKE_SOURCE_DIR}/../iutest/include) 28 set(IUTEST_ROOT_DIR ${CMAKE_SOURCE_DIR}/../iutest) 29endif() 30 31set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/../cmake/modules) 32include(FindIutest) 33find_package(IUTEST) 34include_directories(${IUTEST_INCLUDE_DIR}) 35 36# 37# Update compiler waring flags 38# 39if(MSVC) 40 # Force to always compile with W4 41 if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") 42 string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") 43 else() 44 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") 45 endif() 46elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) 47 # Update if necessary 48 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wno-long-long -pedantic") 49endif() 50 51# 52# Compile 53# 54add_executable(inferior_test ${inferior_test_src}) 55 56# 57# Link 58# 59if(WIN32) 60 target_link_libraries(inferior_test ws2_32) 61endif()

cmake

1# - Try to find iutest include dirs 2# 3# Usage of this module as follows: 4# 5# find_package(IUTEST) 6# 7# Variables used by this module, they can change the default behaviour and need 8# to be set before calling find_package: 9# 10# IUTEST_ROOT_DIR Set this variable to the root installation of 11# iutest if the module has problems finding the 12# proper installation path. 13# 14# Variables defined by this module: 15# 16# IUTEST_FOUND System has iutest, include and library dirs found 17# IUTEST_INCLUDE_DIR The iutest include directories. 18 19find_path(IUTEST_ROOT_DIR 20 NAMES include/iutest.hpp 21 ) 22 23find_path(IUTEST_INCLUDE_DIR 24 NAMES iutest.hpp 25 HINTS ${IUTEST_ROOT_DIR}/include 26) 27 28include(FindPackageHandleStandardArgs) 29find_package_handle_standard_args(IUTEST DEFAULT_MSG 30 IUTEST_INCLUDE_DIR 31)

追記

cmake

1set(inferior_test_src 2 main.cpp 3 ${CMAKE_SOURCE_DIR}/../inferioir/vector/inferior_vector.natvis 4)

のように変更しましたがだめですね。

The CXX compiler identification is MSVC 19.12.25835.0 Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.12.25827/bin/Hostx86/x64/cl.exe Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.12.25827/bin/Hostx86/x64/cl.exe -- works Detecting CXX compiler ABI info Detecting CXX compiler ABI info - done Detecting CXX compile features Detecting CXX compile features - done The C compiler identification is MSVC 19.12.25835.0 Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.12.25827/bin/Hostx86/x64/cl.exe Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.12.25827/bin/Hostx86/x64/cl.exe -- works Detecting C compiler ABI info Detecting C compiler ABI info - done Detecting C compile features Detecting C compile features - done Found IUTEST: C:/Users/yumetodo/Documents/git/inferior/iutest/include Configuring done CMake Error at CMakeLists.txt:55 (add_executable): Cannot find source file: C:/Users/yumetodo/Documents/git/inferior/inferioir/vector/inferior_vector.natvis Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx CMake Error: CMake can not determine linker language for target: inferior_test Generating done

CMake: 3.10.1
Visual Studio 2017

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

CMakeのソースを見てみましたが、ソース・ファイルの1つとして指定すればよさそうです。
.natvisを使ってVisual Studioのデバッグを見やすくするのソースをちょっと修正してやってみたらうまくいきました。

natvis_test.cpp(元記事のソースにコンストラクタとデストラクタを追加しました)

C++

1#include <iostream> 2#include <algorithm> 3 4struct MyArray 5{ 6 int* m_data; 7 int m_size; 8 MyArray(std::size_t iSize) : m_data(new int[iSize]), m_size(iSize) 9 { 10 std::fill(m_data, m_data+m_size, 0); 11 } 12 ~MyArray() 13 { 14 delete[] m_data; 15 } 16}; 17 18int main() 19{ 20 MyArray array( 10 ); 21 return 0; 22}

MyArray.natvis(元記事のままです)

xml

1<?xml version="1.0" encoding="utf-8"?> 2<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> 3 <Type Name="MyArray"> 4 <DisplayString>{{[size] = {m_size}}}</DisplayString> 5 <Expand> 6 <Item Name="size">m_size</Item> 7 <ArrayItems> 8 <Size>m_size</Size> 9 <ValuePointer>m_data</ValuePointer> 10 </ArrayItems> 11 </Expand> 12 </Type> 13</AutoVisualizer>

CMakeLists.txt(オリジナルです)

txt

1project(natvis_test) 2 3set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4 /EHsc") 4 5add_executable(natvis_test natvis_test.cpp MyArray.natvis)

これでQiitaの記事のようにarrayの内容が表示されました。

Visual Studio 2017 Community
CMake 3.10.2


natvis知りませんでしたが、便利そうですね。
一々xmlファイルを作る根性はないですが、STL用のnatvisファイルって提供されていると良いですね。

投稿2018/02/24 12:58

編集2018/02/24 13:01
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yumetodo

2018/02/24 14:56

だめですね・・・なんでだろう
yumetodo

2018/02/24 14:58

とりあえずPC再起動してみるか
yumetodo

2018/02/24 16:48

あああ、単純にnatvisファイルへのパスが間違っていたというかtypoしていた(inferioirじゃなくてinferior)。あたしってば本当におバカ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問