C++を学ぶ

Update 2024.12.25

C++を学ぶ

C++を学ぶ続編です。

VisualStudioを使った時のmake方法を知りたい。

ということで下記に掲載。

Visual StudioでのMakeの利用方法

Windows版のVisual Studioは、通常 MSBuild というビルドシステムを使います。しかし、あえて Unix系の make と同様の方法でビルドを行いたい場合、Visual Studio付属のツール nmake を使用できます。
また、CMake を利用して Visual Studio 用のソリューションやプロジェクトを生成する方法もあります。

1. nmake を使う方法

Visual Studioには、「Developer Command Prompt for Visual Studio」「x64 Native Tools Command Prompt for Visual Studio」 など、コンパイラとnmakeが使えるコマンドプロンプトが同梱されています。この環境であれば、nmake(Windows上のmake相当ツール)が利用可能です。

  1. Developer Command Prompt を起動
    スタートメニューから「開発者コマンドプロンプト (Developer Command Prompt)」を探して起動します。Visual Studioのバージョンにより名称が異なる場合があります。
  2. ソースコードとMakefileを用意
    Linuxなどで使っていた Makefile と同等の記述を、Windows用に微調整します(拡張子は大文字・小文字に関係なくMakefileのままでOK)。コンパイラの呼び出しが cl になる点などが主な違いです。
  3. Makefileの例(nmake用)

# Makefile (Visual Studio + nmake 用の例)

# コンパイラ (Microsoft C/C++ コンパイラ)
CC = cl

# コンパイル時のオプション
CFLAGS = /EHsc /W4

# ターゲット名
TARGET = main.exe

# オブジェクトファイル
OBJ = main.obj mylib.obj

all: $(TARGET)

$(TARGET): $(OBJ)
    $(CC) $(CFLAGS) /Fe$@ $(OBJ)

main.obj: main.cpp mylib.h
    $(CC) $(CFLAGS) /c main.cpp

mylib.obj: mylib.cpp mylib.h
    $(CC) $(CFLAGS) /c mylib.cpp

clean:
    del $(TARGET) *.obj

上記では、cl(Visual C++コンパイラ)を使用し、拡張オプション /EHsc (例外ハンドリング)や /W4 (警告レベル4)を指定しています。
GCCやClangにおける -std=c++17-Wall のようなオプションと同じ意味合いです。

  1. コンパイル
    同ディレクトリ内にある Makefile を使い、以下を実行します。
    nmake

    成功すれば main.exe が生成されます。
    nmake clean でオブジェクトファイルや実行ファイルを削除できます。

2. CMake を使う方法

Visual Studioには、CMakeプロジェクト を直接開く機能もあります。CMakeで CMakeLists.txt を用意すれば、Unixライクな make ベースの感覚を保ちつつ、Visual Studio上でビルドやデバッグを行えます。

例として、CMakeLists.txt を簡単に示すと下記のようになります。


cmake_minimum_required(VERSION 3.10)
project(MyProject)

# C++17を使う場合
set(CMAKE_CXX_STANDARD 17)

# ソースファイル
add_executable(main
    main.cpp
    mylib.cpp
)

# インクルードディレクトリを指定(自作ヘッダの場所)
target_include_directories(main PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

ターミナル(Developer Command Promptなど)で cmake . と実行すると、Visual Studio用のプロジェクトファイルやソリューション(.sln)が生成されます。
そのまま cmake --build . とすると、Visual Studioのビルドシステムを使ってコンパイルが行われ、main.exe ができます。

3. Visual Studio GUIを使った場合

通常のVisual Studioワークスペース(.slnファイル)でプロジェクトを作成する場合は、clnmake を手動で呼び出さず、MSBuild という裏側の仕組みが動きます。
ソースを追加して、ソリューションをビルドするだけでOKです。
もし意図的に nmake を使いたい場合は、「nmake プロジェクト」や「Makefileプロジェクト」を新規作成する手段も用意されています。

まとめ

  • Developer Command Promptで nmake Visual Studio付属のコマンドラインツール clnmake を使って、Linuxライクな Makefile ビルドを行う
  • CMake Unix系と同様に CMakeLists.txt を使う。生成された Visual Studio プロジェクトを開いたり、cmake --build コマンドでビルドする
  • Visual Studio のプロジェクト(.vcxprojなど) GUIからソリューションをビルドすると、MSBuildが裏で動く。標準的なやり方

Windowsで「make」風のビルドを行いたいなら、もっとも手軽なのは Developer Command Prompt + nmake です。Linuxで用意した Makefile を大きく書き換えずに済むケースもありますが、コンパイラオプションの違いや、パス設定などを調整してください。
一方で大規模なプロジェクトやクロスプラットフォーム対応なら CMake が有力候補になります。


VisualStudioを使った標準のmake方法を調べてみようと思います。

広告

アフィリエイト広告のスペース