コンテンツにスキップ

同名ファイルの出力におけるObj衝突の解消

時々これどうするんだっけ?となるのでメモ.
例えばA/foo.cppB/foo.cppというファイル構成があったとする.
この際Visual Studioの出力がデフォルトのままだと、Aのfoo.objとBのfoo.objが同じフォルダに出力されることになる.
こうなると先にビルドした方が消えて後にビルドされた方が採用されることになる.
更にWarningも出るので、とりあえず直したいところ.
この解決はVisual Studioで単一のプロジェクト内に同名のソース・ファイルが含まれていてもビルドが通るようにする方法が非常に参考になる.
ずばり、

  1. プロジェクト->プロパティ->構成プロパティ->C/C++->出力ファイルを開く
  2. ASMリストの場所オブジェクトファイル名をデフォルトの$(IntDir)から$(IntDir)%(RelativeDir)とする

こうすればいい感じになる.
つまり、A/foo.objB/foo.objの二つが出力されて衝突を免れることになる.
デフォルトの衝突を直したいときはこれをやっておくとよい.