[解決済み] makeファイルによるディレクトリの作成
質問
makefileでディレクトリを作成したい。私のプロジェクトディレクトリは次のようなものです。
+--Project
+--output
+--source
+Testfile.cpp
+Makefile
すべてのオブジェクトと出力をそれぞれの出力フォルダに入れたいのですが。コンパイル後にこのようなフォルダ構造を作りたい。
+--Project
+--output
+--debug (or release)
+--objs
+Testfile.o
+Testfile (my executable file)
+--source
+Testfile.cpp
+Makefile
いくつかのオプションを試してみましたが、成功しませんでした。makeファイルを使ってディレクトリを作成する方法を教えてください。私のMakefileを掲載しておきますので、ご検討ください。
#---------------------------------------------------------------------
# Input dirs, names, files
#---------------------------------------------------------------------
OUTPUT_ROOT := output/
TITLE_NAME := TestProj
ifdef DEBUG
TITLE_NAME += _DEBUG
else
ifdef RELEASE
TITLE_NAME += _RELEASE
endif
endif
# Include all the source files here with the directory tree
SOURCES := \
source/TestFile.cpp \
#---------------------------------------------------------------------
# configs
#---------------------------------------------------------------------
ifdef DEBUG
OUT_DIR := $(OUTPUT_ROOT)debug
CC_FLAGS := -c -Wall
else
ifdef RELEASE
OUT_DIR := $(OUTPUT_ROOT)release
CC_FLAGS := -c -Wall
else
$(error no build type defined)
endif
endif
# Put objects in the output directory.
OUT_O_DIR := $(OUT_DIR)/objs
#---------------------------------------------------------------------
# settings
#---------------------------------------------------------------------
OBJS = $(SOURCES:.cpp=.o)
DIRS = $(subst /,/,$(sort $(dir $(OBJS))))
DIR_TARGET = $(OUT_DIR)
OUTPUT_TARGET = $(OUT_DIR)/$(TITLE_NAME)
CC_FLAGS +=
LCF_FLAGS :=
LD_FLAGS :=
#---------------------------------------------------------------------
# executables
#---------------------------------------------------------------------
MD := mkdir
RM := rm
CC := g++
#---------------------------------------------------------------------
# rules
#---------------------------------------------------------------------
.PHONY: all clean title
all: title
clean:
$(RM) -rf $(OUT_DIR)
$(DIR_TARGET):
$(MD) -p $(DIRS)
.cpp.o:
@$(CC) -c $< -o $@
$(OBJS): $(OUT_O_DIR)/%.o: %.cpp
@$(CC) -c $< -o $@
title: $(DIR_TARGET) $(OBJS)
どのように解決するのですか?
Unixのような環境を想定して、このようにします。
MKDIR_P = mkdir -p
.PHONY: directories
all: directories program
directories: ${OUT_DIR}
${OUT_DIR}:
${MKDIR_P} ${OUT_DIR}
これはトップレベルのディレクトリで実行されなければなりません - あるいは、${OUT_DIR}の定義が実行される場所に対して正しくなければならないでしょう。 もちろん、Peter Miller の " の教義に従うのであれば。 再帰的な作成は有害であると考えられている という論文に従うのであれば、とにかくトップレベルのディレクトリで make を実行することになるでしょう。
私は今、これ (RMCH) で遊んでいるところです。 私が試験場として使用しているソフトウェアのスイートに少し適応させる必要がありました。 このスイートには、15 のディレクトリに広がるソースで構築された 12 の別々のプログラムがあり、そのうちのいくつかは共有されています。 しかし、少し気をつければ、それは可能です。 OTOH は、初心者には適切ではないかもしれません。
コメントで指摘されているように、「ディレクトリ」に対するアクションとして「mkdir」コマンドをリストアップすることは間違っています。 コメントで指摘されているように、結果として生じる '出力/デバッグを行う方法がわからない' エラーを修正する他の方法があります。 ひとつは 'directories' 行への依存を取り除くことです。 mkdir -p' は、作成するように要求されたすべてのディレクトリがすでに存在していれば、エラーを発生させないので、これはうまくいきます。 もう一つは、表示されているメカニズムで、ディレクトリが存在しない場合にのみ作成を試みるものです。 修正された」バージョンは、私が昨夜考えていたものです。しかし、両方のテクニックが機能します (そして、両方とも output/debug が存在するがディレクトリではなくファイルである場合に問題が発生します)。
関連
-
[解決済み】コマンドラインからmakeに追加の変数を渡す場合
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] Bashでlsを使ってディレクトリだけをリストアップする?
-
[解決済み] フォルダが存在しない場合、作成する
-
[解決済み] フォルダが存在しない場合、フォルダを作成する
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み] Makefile からプログラムが存在するかどうかをチェックする
-
[解決済み] タブ文字がない有効なMakefileは作れますか?
-
[解決済み] メイクファイル ifeq 論理的または
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン