MinGW64 & MSYSを用いた CMake プロジェクトのための設定


Windowsの上で,MinGW64 & MSYS を用いた開発をするための設定です.

Cygwin → MinGW64 → MinGW64 & MSYS と放浪を続けましたが,ようやく定位置を見つけたような気がします.MinGW64 は Windows API をターゲットとしたコンパイラで MSYS は MinGW64 と相性のよい作業環境という認識です.MinGW64 はコンパイラのみのような感じなのですが,MSYS を入れることで各種の開発用のツールが利用できるようになります.ぼくとしては bash と pkg-config が利用できることが魅力でした.Cygwin が利用できたらよかったのですが,MinGW64 と Cygwin は共存できないとの記述を読んだので,他のソリューションを探していました.

Windows の PATH 環境変数に $DROPBOX/win/bin を追加し,$HOME/.profile に以下の一行を追加すうことで設定が有効になります.

. "$DROPBOX"/win/bin/profile.sh
  • Windowsキー+x+r msys
    これでシェルが起動します.実際には msys.bat が起動されます.PATH に win/bin を追加するのは,このバッチファイルを起動するのが唯一の目的だったりします.
  • drop
    Dropbox のディレクトリに移動するためのコマンド.Dropbox for Business の契約をして依頼,Dropbox フォルダの名前が Dropbox (smartnova) というシェルからは非常に入力しづらいパスになってしまいました.(かなり迷惑.Dropbox 社に不満を伝えました)この drop コマンドなしには生きていかれなくなりました.
  • cmake-project
    CMake を用いて開発をしているプロジェクトのディレクトリでこのコマンドを実行することで,各種環境変数を設定します.ビルド作業は以下のとおりです.

    1. cmake-project
    2. cmake
      /tmp/… を作業ディレクトリとしているのでソースのあるディレクトリは汚しません.
    3. make
    4. make install
      デフォルトで /usr/local 以下にインストールします.
    5. distclean
      あと rootbuild というコマンドも定義されます.それぞれ,ソースとビルドのディレクトリに移動するためのコマンドです.


#!/bin/sh
if [ "$_system_type" = Darwin ]; then
export OSTYPE=Darwin
export C_INCLUDE_PATH=/opt/brew/include
export CPLUS_INCLUDE_PATH=/opt/brew/include
export CMAKE=/opt/brew/bin/cmake
export MAKE=/usr/bin/make
fi
if [ "$MSYSTYPE" = 1 ]; then
export PKG_CONFIG_PATH=/mingw/msys/local/lib/pkgconfig
export CPPFLAGS="-I/mingw/msys/local/include"
export CFLAGS="$CPPFLAGS -mms-bitfields -mthreads"
export CXXFLAGS="$CFLAGS"
export LDFLAGS="-L/mingw/msys/loadl/lib"
export CMAKE="C:\\Program Files (x86)\\CMake\\bin\\cmake"
export MAKE=/bin/make
fi
if [ "$MSYSTYPE" = 2 ]; then
export PKG_CONFIG_PATH=/mingw64/lib/pkgconfig
# export CC=clang
# export CXX=clang++
export CFLAGS="$CPPFLAGS -mms-bitfields -mthreads"
export CXXFLAGS="-std=c++11 $CFLAGS"
export CMAKE=/mingw64/bin/cmake
export MAKE=/mingw64/bin/mingw32-make
fi
if [ "$OSTYPE" = msys ]; then
export _PROJECT_ROOT_="$PWD"
else
export _PROJECT_ROOT_="`echo "$PWD" | sed -e 's/Dropbox (smartnova)/Dropbox/'`"
fi
_PROJECT_SUFFIX_=`echo "$PWD" | sed -e 's/.*Dropbox (smartnova)\///' -e 's/.*wakita\///'`
if [ "$MSYSTYPE" = 1 ]; then
export _PROJECT_BUILD_="/mingw/msys/tmp/$_PROJECT_SUFFIX_"
elif [ "$MSYSTYPE" = 2 ]; then
export _PROJECT_BUILD_="/tmp/$_PROJECT_SUFFIX_"
else
export _PROJECT_BUILD_="/tmp/$_PROJECT_SUFFIX_"
fi
mkdir -p "$_PROJECT_BUILD_"
PATH="$_PROJECT_BUILD_/bin:$_PROJECT_BUILD_:$PATH"
root() { cd "$_PROJECT_ROOT_"/$1; }
build() { cd "$_PROJECT_BUILD_"/$1; }
cmf() { if [ "$1" = "" ]; then build CMakeFiles; else build CMakeFiles/$1.dir; fi }
_cmake() { "$CMAKE" $*; }
cmake() {
if [ "$MSYSTYPE" = 1 ]; then
"$CMAKE" -DCMAKE_INSTALL_PREFIX:PATH=/mingw/msys/local $* -G"MSYS Makefiles" -H. -B"$_PROJECT_BUILD_"
elif [ "$MSYSTYPE" = 2 ]; then
"$CMAKE" -DCMAKE_INSTALL_PREFIX:PATH=/usr/local -DCMAKE_PREFIX_PATH=/mingw64/lib/cmake/glfw $* -G"MSYS Makefiles" -H. -B"$_PROJECT_BUILD_"
elif [ "$OSTYPE" = Darwin ]; then
/opt/brew/bin/cmake -DCMAKE_PREFIX_PATH=/opt/brew/lib/cmake/glfw $* -G"Unix Makefiles" -H"$_PROJECT_ROOT_" -B"$_PROJECT_BUILD_"
fi
}
make() {
$MAKE -C "$_PROJECT_BUILD_" $*;
}
vmake() { make VERBOSE=1 $*; }
debug() {
if [ -x "$_PROJECT_BUILD_/$1" ]; then gdb "$_PROJECT_BUILD_/$1"
elif [ -x "$_PROJECT_BUILD_/bin/$1" ]; then gdb "$_PROJECT_BUILD_/bin/$1"
fi
}
distclean() { rm -rf "$_PROJECT_BUILD_"; }

view raw

cmake-root

hosted with ❤ by GitHub


PATH="$DROPBOX"/win/bin:$DROPBOX/bin:$PATH
pf() { cd "${PROGRAMFILES}"/$1; }
drop() { cd "$DROPBOX"/$1; }
win() { drop win/$1; }
LANG=C
if [ -f /msys.ico ]; then
export MSYSTYPE=1
export LIBRARY_PATH=/mingw/msys/local/lib
PATH=/mingw/mingw64/bin:$PATH
elif [ -f /msys2.ico ]; then
export MSYSTYPE=2
PATH=/mingw64/bin:$PATH
fi
cmake-root() { . "$DROPBOX/win/bin/cmake-root"; }
lf() { ls -FC $*; }
la() { ls -aFC $*; }
ll() { ls -l $*; }
vi() { vim $*; }
dojo() {
drop work/opengl/dojo
cmake-root
}

view raw

profile

hosted with ❤ by GitHub

MinGW64 & MSYSを用いた CMake プロジェクトのための設定」への1件のフィードバック

コメントは受け付けていません。