現在のOSのインジケータであるパラメータを知りたい。 WindowsとLinuxをサポートしている場合、どのようにしてOSのタイプを区別するシステムパラメータを取得できますか?これは、WindowsとLinuxの両方で実行されるOSに依存しないmakefileの場合、 'if'のパラメータをチェックすることで実現します。ビルドプラットフォームを適切に特定するにはどうすればよいですか?
3
A
答えて
3
これまでは、環境変数OSの値を確認しました。これはWindows上で設定されます。他のプラットフォームでは、明示的に環境内に設定しています。これは、私はメイクを経由して、プラットフォーム固有の設定に引き出すことができるので、私はそれからちょうど
SUPPORTED_PLATFORMS=Windows_NT AIX AIX32 Solaris8 Linux HPUX Solaris_64
ifeq (,$(findstring $(OS),$(SUPPORTED_PLATFORMS)))
all %:
@echo The OS environment variable is set to [$(OS)].
@echo Please set the OS environment variable to one of the following:
@echo $(SUPPORTED_PLATFORMS)
else
include makefile.$(OS)
all:
@$(TCLSH) makefile.tcl
@$(MAKE) -f makefile.gen
clean:
@$(TCLSH) makefile.tcl
@$(MAKE) -f makefile.gen clean
@$(RM) makefile.gen
etags:
@$(RM) TAGS
@etags *.cpp *.h TAGS
@$(MAKE) -C Core etags
@$(MAKE) -C Components etags
@$(MAKE) -C Repository etags
tags: ctags
ctags:
@ctags *.h
@$(MAKE) -C Core ctags
@$(MAKE) -C Components ctags
@$(MAKE) -C Repository ctags
lint:
@$(TCLSH) makefile.tcl
@$(MAKE) -f makefile.gen lint
depends:
@$(TCLSH) makefile.tcl
@$(MAKE) -f makefile.gen depends
endif
このすべての作品をやる私のメインのmakefileで
makefile.Windows_NT
makefile.Linux
makefile.HPUX
...あなたが呼ばれるのmakefileにプラットフォーム固有の設定をプッシュすることができます$(OS)
これは、私のメインメークファイルの合計であり、7つの異なるプラットフォームでコンパイルされます。検出をより鮮明にすることができますが、それは理解力を低下させます。私は
#*******************************************************************************
#
# Platform specific tools
#
CC = CL
RM = rm
LINK = LINK
ETAGS = c:\emacs\bin\etags
TCLSH = tclsh83
#*******************************************************************************
#
# Platform specific CC definitions
#
INCLUDE := $(SYS_INCDIR);$(INCLUDE);$(SOURCE_ROOT_DIR)/SivTech/cpp;$(ORACLE_INCDIR);$(DB2_INCDIR);$(ODBC_INCDIR);$(MYSQL_INCDIR);$(TCL_INCDIR);$(XML_INCDIR);$(XSLT_INCDIR);$(JNI_INCLUDE);$(ACE_INCDIR);$(TAO_INCDIR);$(TAO_SERVICES_INC);$(CPPUNIT_INCDIR);$(ICU_INCDIR);$(SAP_INCDIR);$(QAS_INCDIR);$(INFA_INCDIR);$(MELISSADATA_INCDIR);$(ADDRESSDOCTOR_INCDIR)
CC_DEFS := $(CC_DEFS) -DOS_WIN_95 -D_WIN32_WINNT=0x400 -D_MBCS -DWIN32_LEAN_AND_MEAN -DWIN32 -DWIN32_EXTRA_LEAN $(CC_DEFINES)
CC_FLAGS_CMN := /c /nologo /G7 /EHsc /W3 $(CC_FLAGS$) $(CC_DEFS) $(MYFLAGS)
CC_FLAGS_DBG := $(CC_FLAGS_CMN) /Gi /MDd /Od /Zi /RTCu /RTCs /GZ
のようなものの定義を提供し、各makefile.WHATEVERで
は明らかにこれは非常にC/C++フォーカスメイクファイルですが、それはあなたが抽象離れて、すべてのプラットフォームの仕様のできることを証明しています。
クリス
0
あなたがチェックアウトに興味がある可能性があり:Pre-defined C/C++ Compiler Macrosを。それは金鉱です。
関連する問題
- 1. グリッドを適切にループするにはどうすればよいですか?
- 2. 不適切なテストケースを適切に中止するにはどうすればよいですか?
- 3. GCDなどで適切な数のタスクを決定するにはどうすればよいですか?
- 4. ファクトリーガールに関連付けを適切に設定するにはどうすればよいですか?
- 5. Celeryタスクを適切な設定で確実に実行するにはどうすればよいですか?
- 6. ハニカムの通知 - largeIconを適切なサイズに設定するにはどうすればよいですか?
- 7. エクスプレスで特定のルータにミドルウェアを適用するにはどうすればよいですか?
- 8. Xcodeのストーリーボードで適切なUIImageViewを設定するにはどうすればよいですか?
- 9. WindowsでC++プログラムの適切な初期ロケールを設定するにはどうすればよいですか?
- 10. このOpenGL ESテクスチャに適切なパースペクティブを適用するにはどうすればよいですか?
- 11. AngularJSの特定のプロパティにフィルタを適用するにはどうすればよいですか?
- 12. 特定の領域のみにCSSを適用するにはどうすればよいですか?
- 13. 特定の要素にのみカスタムスタイルを適用するにはどうすればよいですか?
- 14. テーブルの特定の要素にCSSを適用するにはどうすればよいですか?
- 15. iOSでユーザーを特定するにはどうすればよいですか?
- 16. レイアウトを適切に切り替えるにはどうすればよいですか?
- 17. Gradle - 特定のサブプロジェクトにプラグイン設定を適用するにはどうすればいいですか?
- 18. 特定のパスにリダイレクトするにはどうすればよいですか?
- 19. ボタンを使用して特定のJPanelに切り替えるにはどうすればよいですか?
- 20. 特定の文字の後に文字列を切り取るにはどうすればよいですか?
- 21. Google OAuth2ユーザーを特定するにはどうすればよいですか?
- 22. PrimeFacesのツールチップバックグラウンドカラーを特定するにはどうすればよいですか?
- 23. Webリクエストクライアントを特定するにはどうすればよいですか?
- 24. Google Cloud StorageからAndroidアプリにファイルを適切にダウンロードするにはどうすればよいですか?
- 25. android studioのAsyncTaskに適切なエラーメッセージを設定するにはどうすればいいですか?
- 26. 特定のディレクトリで特定のmod_securityルールを無効にするにはどうすればよいですか?
- 27. fullcalendar.jsでは、特定のイベントにのみ適用するようにeventLimitを設定するにはどうすればよいですか?
- 28. 行列が使用するメモリを適切に解放するにはどうすればよいですか?
- 29. 毎週適切に短いスパンデータに変換するにはどうすればよいですか?
- 30. UL LI要素からフォームを適切に提出するにはどうすればよいですか?
あなたは、あなたが話している環境についてもう少し具体的にする必要があります。例としてC/C++、Java、.NET、Python、Makeファイルなどがあります。 – tronda
makefile環境でCソースコードをビルドします。 –
これはどの実装ですか? – unwind