1

Ubuntu で問題なくコンパイルできる一連のプログラムがあり、Windows でもコンパイルするためのセットアップに取り組んでいます。MSYS2を使用しています。

次のようなメインの Makefile があります。

#### Project main directory

DIR_MAIN=$(shell pwd)

#### Compile all

all:
    @$(MAKE) -C src/Misc DIR_MAIN=$(DIR_MAIN)
    @$(MAKE) -C src/CF_states DIR_MAIN=$(DIR_MAIN)

など。にはsrc/、そのプロジェクトの特定の Makefile を含むフォルダーがあります。それらの構造は次のとおりです。

#### Directories and flags

ifndef $(DIR_MAIN)
  DIR_MAIN=../..
endif

DIR_EXE=$(DIR_MAIN)/Programs
DIR_SRC=$(DIR_MAIN)/src/Misc
DIR_SFMT_SRC=$(DIR_MAIN)/src/sfmt
DIR_BLD=$(DIR_MAIN)/build/Misc
COMP=g++

COMPILE_FLAGS= -std=c++11 -O3 -lstdc++ -msse2
LINK_FLAGS= -O3 -fopenmp -lgsl -lgslcblas -lm -lhdf5_cpp -lhdf5


#### Compile all

all: setup $(DIR_BLD)/input.o $(DIR_BLD)/misc_sphere.o $(DIR_BLD)/misc.o 

setup:
    @mkdir -p $(DIR_BLD)
    @mkdir -p $(DIR_EXE)

#### Misc source

$(DIR_BLD)/input.o: $(DIR_SRC)/input.cpp $(DIR_SRC)/input.h $(DIR_SRC)/misc_sphere.h
    ${COMP} -c input.cpp ${COMPILE_FLAGS} -o $@

$(DIR_BLD)/misc_sphere.o: $(DIR_SRC)/misc_sphere.cpp $(DIR_SRC)/misc_sphere.h $(DIR_SRC)/misc.h
    ${COMP} -c misc_sphere.cpp ${COMPILE_FLAGS} -o $@

$(DIR_BLD)/misc.o: $(DIR_SRC)/misc.cpp $(DIR_SRC)/misc.h
    ${COMP} -c misc.cpp ${COMPILE_FLAGS} -o $@

このようにしてsrc/、相対パスを使用して のフォルダから、または絶対パスを使用してメインの Makefile から、特定の Makefile を実行できます。

これは Ubuntu では機能しますが、MSYS2 では相対パスのみが機能します。つまり、フォルダーから特定の Makefile をそれぞれ実行します。を使用してメインの Makefile を実行すると

mingw32-make.exe

エラーが発生します

$ mingw32-make.exe
mingw32-make[1]: Entering directory 'C:/msys64/home/Jorgen/fqhe_mc_sphere/src/Misc'
mingw32-make[1]: *** No rule to make target '/home/Jorgen/fqhe_mc_sphere/src/Misc/input.cpp', needed by '/home/Jorgen/fqhe_mc_sphere/build/Misc/input.o'.  Stop.
mingw32-make[1]: Leaving directory 'C:/msys64/home/Jorgen/fqhe_mc_sphere/src/Misc'
Makefile:8: recipe for target 'all' failed
mingw32-make: *** [all] Error 2

を使用して確認できるように、ファイル/home/Jorgen/fqhe_mc_sphere/src/Misc/input.cppはそこにありますがls。理由はありますか?

編集:

結果以外の最初のターゲットを相対パスに変更します。つまり、

$(DIR_BLD)/input.o: input.cpp input.h misc_sphere.h
    ${COMP} -c input.cpp ${COMPILE_FLAGS} -o $@

出力オブジェクト ファイルについても同様のエラーが発生します。

Fatal error: can't create /home/Jorgen/fqhe_mc_sphere/build/Misc/input.o: No such file or directory

フォルダ/home/Jorgen/fqhe_mc_sphere/build/Misc/は存在しますが。

MSYS2 を管理者として実行しようとしましたが、役に立ちませんでした。

4

1 に答える 1