PreprocessorMacros、OtherSwiftFlags、ActiveCompilationConditionsの使い分け
よくプリプロセッサマクロと呼ばれていますが、Swiftでは設定方法が異なるため、便宜上まとめてCompilation Conditionと呼ぶことにします。
Compilation Condition(とConditional Compilation Blockを組み合わせるこで)でコードをコンパイルレベルで分岐することができます。例えば、下記コードであればデバッグ時にprint(”fuga”)
はコンパイルされません。
#if DEBUG
print("hoge")
#else
print("fuga")
#endif
Compilation Conditionの3つの設定方法:PreprocessorMacros
、OtherSwiftFlags
、ActiveCompilationConditions
の違いと設定方法を備忘録も兼ねてメモ。
Conditional Compilation Blockのドキュメント
結論
先に結論を書きます。
Objective-Cなど:Preprocessor Macros
を使用
Swift:Active Compilation Conditions
を使用
Preprocessor Macros
概要
Objective-Cなどで使用します。これを設定してもSwiftでは参照できず未定義扱いとなってしまうので注意が必要です。
昔のドキュメントにはgccコンパイラに-Dオプションで渡す、と書いてありました。なのでBuildSettingsに設定する際は-Dは不要です。
設定方法
最近のドキュメント
Space-separated list of preprocessor macros of the form
foo
orfoo=bar
.
昔のドキュメント
Space-separated list of option specifications. Specifies preprocessor macros in the form
foo
(for a simple#define
) orfoo=1
(for a value definition). This list is passed to the compiler through thegcc -D
option when compiling precompiled headers and implementation files.
Other Swift Flags
概要
Swift用です。逆にObjective-Cなどでは使用できません。
ドキュメントに明記されている箇所を見つけることができなかったですが、Swiftコンパイラにそのまま渡すのでBuildSettingsに設定する際は-D HOGE
の形式で設定する必要があります。
設定方法
最近のドキュメント
A list of additional flags to pass to the Swift compiler.
Active Compilation Conditions
概要
こちらも同じくSwift用です。Objective-Cなどでは使用できません。
Other Swift Flagsより後発でこちらは-Dをつける必要がないため、新規で設定するのであればOther Swift Flagsよりこちらを使用するのがいいかなと思います。
設定方法
最近のドキュメント
A list of compilation conditions to enable for conditional compilation expressions.
太古のリリースノート
•
Active Compilation Conditions
is a new build setting for passing conditional compilation flags to the Swift compiler. Each element of the value of this setting passes to swiftc prefixed with-D
, in the same way that elements ofPreprocessor Macros
pass to clang with the same prefix. (22457329)
Discussion