얼마전 Xcode가 업데이트 되면서 clang 버전도 Apple LLVM version 5.1 (clang-503.0.38) (based on LLVM 3.4svn) 로 업데으트 되었다. 그러면서 안드로이드 컴파일시에 못보던 에러가 보이기 시작했다.
clang: error: unknown argument: '-fpreprocessed' [-Wunused-command-line-argument-hard-error-in-future]
clang: note: this will be a hard error (cannot be downgraded to a warning) in the future
Xcode 5.1 릴리즈 노트를 찾아보니 아래와 같이 적혀 있다.
The Apple LLVM compiler in Xcode 5.1 treats unrecognized command-line options as errors. This issue has been seen when building both Python native extensions and Ruby Gems, where some invalid compiler options are currently specified. Projects using invalid compiler options will need to be changed to remove those options. To help ease that transition, the compiler will temporarily accept an option to downgrade the error to a warning:
-Wno-error=unused-command-line-argument-hard-error-in-future
Note: This option will not be supported in the future. To workaround this issue, set the ARCHFLAGS environment variable to downgrade the error to a warning. For example, you can install a Python native extension with:
$ ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future easy_install ExtensionName
Similarly, you can install a Ruby Gem with:
$ ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future gem install GemName 16214764 updated
clang에서 존재하는 않는 매개변수가 사용되면 에러를 내면서 종료되도록 변경된 것이다. 지금은 우회할 수 있지만 앞으론 아애 불가능해질것이라고 단단히 겁을 준다.
아무튼 기존 안드로이드 빌드에서 gcc에서 지원하는 매개변수를 사용하던게 clang에선 없었기 때문에 발생한 문제다. 귀찮은 오류 매세지를 피하기 위해 다음과 같이 환경변수를 선언해주자.
export ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future