[解決済み】OSがmakefileを検出する
2022-03-30 08:45:46
質問
私は日常的に複数の異なるコンピュータと、Mac OS X、Linux、またはSolarisといった複数の異なるオペレーティングシステムで作業しています。私が取り組んでいるプロジェクトでは、リモート git リポジトリからコードを取得しています。
私は、どの端末にいてもプロジェクトに取り組めるのがいいと思っています。これまでは、パソコンを切り替えるたびにmakefileを変更することで、OSの変更を回避する方法を見つけてきました。しかし、これは面倒で、多くの頭痛の種を引き起こしています。
どのOSを使用しているかを検知し、それに応じて構文を変更するようにmakefileを修正するにはどうしたらよいでしょうか?
以下は、そのmakefileです。
cc = gcc -g
CC = g++ -g
yacc=$(YACC)
lex=$(FLEX)
all: assembler
assembler: y.tab.o lex.yy.o
$(CC) -o assembler y.tab.o lex.yy.o -ll -l y
assembler.o: assembler.c
$(cc) -o assembler.o assembler.c
y.tab.o: assem.y
$(yacc) -d assem.y
$(CC) -c y.tab.c
lex.yy.o: assem.l
$(lex) assem.l
$(cc) -c lex.yy.c
clean:
rm -f lex.yy.c y.tab.c y.tab.h assembler *.o *.tmp *.debug *.acts
解決方法は?
すでに多くの良い答えがここにありますが、私は両方のより完全な例を共有したかったのです。
-
を想定していません。
uname
Windowsに存在する - プロセッサも検出します
ここで定義したCCFLAGSは、必ずしも推奨や理想のものではなく、私がOS/CPU自動検出機能を追加したプロジェクトでたまたま使っていたものです。
ifeq ($(OS),Windows_NT)
CCFLAGS += -D WIN32
ifeq ($(PROCESSOR_ARCHITEW6432),AMD64)
CCFLAGS += -D AMD64
else
ifeq ($(PROCESSOR_ARCHITECTURE),AMD64)
CCFLAGS += -D AMD64
endif
ifeq ($(PROCESSOR_ARCHITECTURE),x86)
CCFLAGS += -D IA32
endif
endif
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
CCFLAGS += -D LINUX
endif
ifeq ($(UNAME_S),Darwin)
CCFLAGS += -D OSX
endif
UNAME_P := $(shell uname -p)
ifeq ($(UNAME_P),x86_64)
CCFLAGS += -D AMD64
endif
ifneq ($(filter %86,$(UNAME_P)),)
CCFLAGS += -D IA32
endif
ifneq ($(filter arm%,$(UNAME_P)),)
CCFLAGS += -D ARM
endif
endif
関連
-
[解決済み】makefile:4。*** missing separator. 停止する
-
[解決済み】Makefileの中の.PHONYの目的は何ですか?
-
[解決済み] CygwinでのMakefile
-
[解決済み] 「複数のターゲットパターン」Makefile のエラー
-
[解決済み] GNU Makefile の変数割り当て =, ?=, :=, += の違いは何ですか?
-
[解決済み] makefile の記号 $@ と $< はどういう意味ですか?
-
[解決済み] MakefileとCMakeを使ったコンパイルの違いについて
-
[解決済み】makefileに'cd'コマンドを記述するには?
-
[解決済み】gcc makefileのエラー。"No rule to make target ..." (ターゲットにするルールがありません)
-
[解決済み】SIMPLE C++のMakefileの作り方
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】makeコマンドのエラー makefile:18: *** missing separator. 停止する [重複]。
-
[解決済み] GNU make で "commands commence before first target" エラーが発生する。
-
[解決済み] Makefile のターゲットとしてグロブパターンを指定する
-
[解決済み] makeとmake distの違いは何ですか?
-
[解決済み] PATH "文字列を表示するエコーファイルの作成
-
[解決済み] Makefile.amとMakefile.inとは何ですか?
-
[解決済み】Makefileの現在の相対ディレクトリを取得する方法は?
-
[解決済み] Makefileの変数が前提条件として設定されていることを確認する方法は?
-
[解決済み] 別のMakefileからMakefileを呼び出すには?
-
[解決済み】Cygwin、Mac、Linuxで動作しているかどうかを確認する方法は?