cygwinのmakeでbrewappcompile.exe(nmake)を叩くとNMAKE : fatal error U1065:が出て終了する

.makファイルを用いてコンパイルする際VisualStudioのアドインを用いてmakeまたはmake cleanすると思いますが、これをcygwin上でmakeを用いて実行させる場合、エラーが発生し正しく完了しません。


これはMAKEFLAGS特定の文字が入っている場合に起こるようです。


これを解決するためにはMAKEFLASGをクリアしてからbrewappcompileを実行します。

start:
	export MAKEFLAGS=;\
	"$(BREWSDKTOOLSDIR)/VSAddins/common/bin/brewappcompile" application.mak;

clean:
	export MAKEFLAGS=;\
	"$(BREWSDKTOOLSDIR)/VSAddins/common/bin/brewappcompile" application.mak clean;

boost::gilでpng画像を操作する プロジェクトへの追加、サンプル作成編

boost::gilでpng画像を操作する インストール編 - モデラート - C#とゲーム開発と雑記の続き


VisualStudioでコンパイルを通す、警告を消してしまう話とサンプルコードです。
※各ライブラリがc:\にインストールされているとして書きます。

パスを追加

プロジェクトのプロパティを出して、左上の構成のリストボックスですべての構成を選ぶといいです。
追加のインクルードディレクトリ([構成プロパティ]->[C/C++]->[全般])
c:\boost\boost_1_44_0
c:\libpng
c:\zlib


追加の依存ファイル([構成プロパティ]->[リンカ]->[入力])
c:\libpng\projects\visualc71\Win32_LIB_Release\libpng.lib
c:\libpng\projects\visualc71\Win32_LIB_Release\ZLib\zlib.lib
Win32_LIB_Releaseはビルドターゲットごとに変えたほうがいいです。


それぞれ追加します。

エラーと警告抑制

>warning LNK4098: defaultlib 'MSVCRT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
[構成プロパティ]->[リンカ]->[コマンドライン]の追加のオプションに以下のテキストを追加します
構成ごとに設定してください。

/NODEFAULTLIB:LIBCD.lib
/NODEFAULTLIB:MSVCRT.lib


libpng1.4からいくつかの定義がなくなったようで、boostのヘッダをincludeする前に下記の定義が必要です。

#define png_infopp_NULL (png_infopp)NULL 
#define int_p_NULL (int*)NULL


また、古い関数が使用されているために警告が出るので抑制します。

#pragma warning(disable:4996)

以上を踏まえてサンプルコード

サンプルコード

png画像を読み込み、黒で不透明なピクセルを青に置き換え出力するサンプルです。

#define png_infopp_NULL (png_infopp)NULL 
#define int_p_NULL (int*)NULL
#pragma warning(disable:4996)

#include <iostream>
#include <boost/gil/gil_all.hpp>
#include <boost/gil/extension/io/png_io.hpp>

using namespace std;
using namespace boost::gil;

int _tmain(int argc, _TCHAR* argv[]){
  argb8_image_t src;
  try{
    png_read_image("input.png", src);
  }catch(ios_base::failure& e){
    cout << e.what() << endl;
    return 1;
  }
  argb8_view_t v(view(src));
  argb8_view_t::xy_locator src_loc = v.xy_at(0,0);

  for(int y=0; y<src.height(); y++){
    argb8_view_t::x_iterator src_it = v.row_begin(y);
    for(int x=0; x<src.width(); x++){
      if( src_it[x] == argb8_pixel_t(255,0,0,0) ){
        src_it[x] = argb8_pixel_t(255,0,0,255);
      }
    }
  }

  string s("result.png");
  png_write_view(s, v);
  return 0;
}


動かない場合はフィーリングで(ry
argb8を色々変えるといいです。


string s("result.png");がわざわざstringなのに理由はありません。試してみただけです。


ピクセルの特定成分を調べるには、たとえばargb8_pixel_tから赤色を取得するには以下のようにします。

  int r = get_color(src_it[x], red_t());

もしくは

  int r = at_c<1>(src_it[x]);


ピクセル操作はこんな感じかな?


アドビのチュートリアルは気が向いたらやろうかな・・・

boost::gilでpng画像を操作する インストール編

boost::gilは画像処理ライブラリです。画像のフォーマットに依存しないプログラミングができます。
ただしpngを読み書きするには別途libpngをインストールしてリンクする必要があります。


以下Windows環境へのインストール、ビルド手順です。

インストール&ビルド

boostライブラリ

boostのライブラリは以下のページから
Boost C++ Libraries - Browse /boost/1.44.0 at SourceForge.net
boost-jam-3.1.18-1-ntx86.zipとboost_1_44_0.zipを落としてきます。


boostという名前のディレクトリを作成し、上記2ファイルを解凍したものを入れましょう。
次にboost\boost-jam-3.1.18-1-ntx86\bjam.exeをboost\boost_1_44_0にコピーします。
そこでbjam.exeを実行します。
(bootstrap.batを使うのが正しい手順?)


以上です。ビルドの終了までしばらくかかります。

boost::gil

以下のページからgil.zipを入手してください。
http://opensource.adobe.com/wiki/display/gil/Downloads
展開されたgilディレクトリ内のboostとlibsをboost\boost_1_44_0に入れます。
上書きコピーの警告が出ますのではいを選択します。gilのインストールは以上です。
以上でboost::gilそのものは使えるようになりました。


png画像を読み書きしたいのでさらにインストールが必要です。

libpng,zlib

zlibは以下のページの
zlib Home Site
"zlib source code, version 1.2.5, zipfile format"の下に記載されてるリンクから落とします。


libpngのソースコードは以下のページのCurrent version: 1.4.3というテーブルのSource code: prdownloads.sourceforge.netの列にある.zipからダウンロード(全部一緒だと思うけど)
libpng Home Page


それぞれのzipを同じディレクトリに解凍する必要があります。
解凍後それぞれのディレクトリをlibpng,zlibにリネームします。


VisualStudioでビルドするために、libpng\projects\visualc71のlibpng.slnを開きます。
[zlib]->[Source Files]に存在しないファイルなどあるので一旦消し、
zlibディレクトリ以下にある.cを追加します。
example.cは除外します。


libpngのディレクトリパス名にスペースが含まれていると、ビルド中pngtestに失敗するようです。


ビルドターゲットを選択し、必要なライブラリを生成します。今回はLIB Releaseだけ。

終わり

インストールとビルドは以上です。
プロジェクトへの追加とサンプルコードは次のエントリで。

書きました->boost::gilでpng画像を操作する プロジェクトへの追加、サンプル作成編 - モデラート - C#とゲーム開発と雑記

ライブドアブログをエクスポートするツール LiveTearBlogを公開

必要に迫られたんですが、ライブドアブログのエクスポートツールでいいのがなかったので作りました。
AtomAPIでやってます。既存のツールはURLを入力してそれを落としてくるって感じなんですけど、このツールではご自分の、ログインできるブログしかエクスポートできません。
.NET Framework4.0が必要です。あとXPでしか動作確認してません。


起動するとIDを入力するところがあるのでIDを入れます。
下のテキストボックスはパスワードではなくAPIKeyです。ログインして管理画面でAPIKeyを発行して貼り付けてください。
使い方はあまり詳しくはないですけどreadme.txtに書いてます。
MovableType形式でエクスポートされます。


一応言いますが、ご利用はご自身の責任の上で行ってください。
以下のページからどうぞ!たぶん使う人そんないないと思うけど


彩色アゲハ蝶 - プログラム - LiveTearBlog ライブドアブログMTエクスポーター

同人活動用のWEBページを公開しました

ゲームを制作します。個人サークルです。


ゲーム制作の始めはCOLLADAをこねくり回したり、グラフィックの表現でいろいろ研究しなくちゃいけないので、遊べるものが作れるのはいつになるかわかりませんが。
彩色アゲハ蝶

猫物語(黒)感想など

読んだのは2週間ほど前です。数日で1冊読みきったのは数年ぶりでした。実家への帰省は読書に最適だと思った。
あとWORKING!!6,7,8位も一気に読みました。


さて。多少のネタバレあるかもしれません。


この作品も化物語から続く一連のシリーズと同様に、作者の趣味がたぶんに含まれた内容になっていますね。
その辺を省きストーリーの進行のみに纏め上げれば猫物語は1冊で完結していたんじゃないかと思えます。
むしろこの作品はそういう作者の趣味を楽しむものですけどね。


新作と言うことで新しいお話なのかと思っていましたが、ゴールデンウイークの話でした。
化物語で明かされなかったエピソードが、傷物語に続いて語られます。
作品の発表時期と話のエピソードの時系列が異なるので、当時のバサねぇと暦の距離がつかめませんでした。というか春休み以後の彼らはすでに親密だったのでその辺は化物語の頃とでは変わりないのかな?


とあるメタな発言にはいい印象を持ちました。
化物語中で過去の設定に言及していましたが、その過去にあたる猫物語で設定を否定します。むちゃくちゃです。矛盾をメタ発言でフォローした感じにしてます。


めちゃくちゃだけど、作品単体ではなく、シリーズを通してみればなんかおもしろい作品になってると思います。

シェルスクリプトでmakeするobjectのリストを作成する

私の使用している環境は以下の通りなんですが、
Brew SDK v3.1.2 日本語版
BREW SDK Tools 1.1.1 SP05 日本語版
・VisualStudio 2005
・RealView Compilation Tools v3.0 for BREW
ツールバーMakefile for ARM Compilerでmakを作成すると、OBJSとDependencyリストが空の状態で作成されます。

そこでシェルスクリプトでOBJSとDependencyリストを作成することにします。
ここで作成したスクリプトをmake時に呼び出すことで全て自動化することもできるとおもいます。


ソースファイルが"src"ディレクトリにあるという前提です。
3つのシェルスクリプトファイルで構成します。

command.sh

#!/bin/sh
. listo.sh src > objlist.mak
. listdep.sh src > deplist.mak

listo.sh

#!/bin/sh

echo -n "OBJS = "
echo -n "\$(AEESRCPATH)\AEEAppGen.o "
echo -n "\$(AEESRCPATH)\AEEModGen.o "
for file in `find $1 -name "*.cpp"`; do
  echo -n .\\
  cygpath -w $file | sed -e "s/\.cpp/\.o/" | tr '\012' ' '
done

echo ""
echo -n "LINKOBJS = "
echo -n ".\obj\AEEAppGen.o "
echo -n ".\obj\AEEModGen.o "
for file in `find $1 -name "*.cpp"`; do
  echo -n .\\
  cygpath -w $file | sed -e "s/.*\\\\\(.*\)\.cpp/obj\\\\\1\.o/" | tr '\012' ' '
done

listdep.sh

#!/bin/sh

for file in `find $1 -name "*.cpp"`; do
  cc -MM (プリプロセッサ定義など-DXXX) -I$BREWDIR/inc (他のincludeパス) $file
done


パスなど適宜置き換える必要があると思います。


使い方はcygwin

. command.sh

と叩くだけです。


次に、ツールバーMakefile for ARM Compilerで作成したmakを修正します。
OBJS =の記述を削除し、代わりにinclude objlist.makと書きましょう。
そして、DEPENDENCY LIST, DO NOT EDIT BELOW THIS LINE以下にinclude deplist.makと記述すれば終わりです。


さてlistdep.shについて少し。
cc -MMですが、これはソースファイルの依存のルールを書き出すオプションを指定してコンパイラを呼び出すコマンドです。
includeされたファイルなどを羅列するのですが、コンパイルが通るようにプリプロセッサ定義やincludeディレクトリのパスなど適切なオプションを指定する必要があります。
他のツールやcc以外のコンパイラで同様にリストを吐き出せるものがあれば置き換えても問題ありません。