Appleはツールを移動し続けており、コマンドラインツールをインストールするという古いソリューションはxcode-select --install
を使用することで機能しません。
Mojaveでは、xcode-select
は何もインストールせず(GUIは常にパッケージを見つけることができません)、コマンドラインツールは/usr/
または/usr/local
にそれ自体をインストールしません。
xcode-select --install
は私のためにモハベで働きました。 Mac App StoreからXCodeをインストールしてから、開発者ツールをインストールしてみませんか?
ヘッダーの場所については、/Library/Developer/CommandLineTools/
にApplesヘッダーがあります。
$ Sudo find /Library -name stdio.h
/Library/Developer/CommandLineTools/usr/include/c++/v1/stdio.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/stdio.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdio.h
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/sys/stdio.h
そして、brew経由でgccをインストールすると、/usr/local/
にヘッダーが追加されます。
$ Sudo find /usr -name stdio.h
/usr/local/Cellar/gcc/8.2.0/include/c++/8.2.0/tr1/stdio.h
/usr/local/Cellar/gcc/8.2.0/lib/gcc/8/gcc/x86_64-Apple-darwin17.7.0/8.2.0/include/ssp/stdio.h
/usr/local/Cellar/gcc/8.2.0/lib/gcc/8/gcc/x86_64-Apple-darwin17.7.0/8.2.0/include-fixed/stdio.h
/usr/local/Cellar/gcc/8.1.0/include/c++/8.1.0/tr1/stdio.h
/usr/local/Cellar/gcc/8.1.0/lib/gcc/8/gcc/x86_64-Apple-darwin17.5.0/8.1.0/include/ssp/stdio.h
/usr/local/Cellar/gcc/8.1.0/lib/gcc/8/gcc/x86_64-Apple-darwin17.5.0/8.1.0/include-fixed/stdio.h
/usr/local/Cellar/gcc/7.3.0_1/include/c++/7.3.0/tr1/stdio.h
/usr/local/Cellar/gcc/7.3.0_1/lib/gcc/7/gcc/x86_64-Apple-darwin17.3.0/7.3.0/include/ssp/stdio.h
/usr/local/Cellar/gcc@7/7.3.0/include/c++/7.3.0/tr1/stdio.h
/usr/local/Cellar/gcc@7/7.3.0/lib/gcc/7/gcc/x86_64-Apple-darwin17.5.0/7.3.0/include/ssp/stdio.h
/usr/local/Cellar/gcc@7/7.3.0/lib/gcc/7/gcc/x86_64-Apple-darwin17.5.0/7.3.0/include-fixed/stdio.h
/usr/local/include/c++/8.2.0/tr1/stdio.h
/usr/local/lib/gcc/8/gcc/x86_64-Apple-darwin17.7.0/8.2.0/include/ssp/stdio.h
/usr/local/lib/gcc/8/gcc/x86_64-Apple-darwin17.7.0/8.2.0/include-fixed/stdio.h
(これらはAppleのヘッダーではなく、GCC/GLIBCです)。
Dtrussを使用すると、Apple clangがCommandLineTools/SDKs
にあるものを使用することがわかります。
$ Sudo dtruss -f Sudo -u $USER clang test.c -o test 2>&1
3781/0x51d8: pread(0x3, "#include <stdio.h>\n\nint main(void)\n{\n printf(\"Hello, world\\n\");\n return 0;\n}\n\0", 0x4F, 0x0) = 79 0
3781/0x51d8: __pthread_sigmask(0x3, 0x7FFEE3A7E768, 0x7FFEE3A7E76C) = 0 0
3781/0x51d8: close(0x3) = 0 0
3781/0x51d8: __pthread_sigmask(0x3, 0x7FFEE3A7E76C, 0x0) = 0 0
3781/0x51d8: open("/usr/local/include/stdio.h\0", 0x1000000, 0x1A) = -1 Err#2
3781/0x51d8: open("/Library/Developer/CommandLineTools/usr/lib/clang/10.0.0/include/stdio.h\0", 0x1000000, 0x48) = -1 Err#2
3781/0x51d8: open("/Library/Developer/CommandLineTools/usr/include/stdio.h\0", 0x1000000, 0x37) = -1 Err#2
3781/0x51d8: open("/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdio.h\0", 0x1000000, 0x47) = 3 0
これはヘッダーをインストールします:
/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkgを開きます
Xcodeは、複数のSDKとXcodeの複数のインストールをサポートするようになりました。 SDKはXcode.app内にあり、Xcode.appはデフォルトでアプリケーションにインストールされますが、他の場所にある場合もあります。
xcrun --show-sdk-path
はデフォルトのSDKパスを表示しますが、他にもある場合があります。たとえば、1つの可能なパスは/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk
です。そこから、usr/include
は標準のCヘッダーなどの一般的なパブリックヘッダーを保持し、さまざまなAppleヘッダーはSystem
の下のフレームワークにあります。
/Applications/Xcode.app/Contents/Developer/Platforms
では、iPhoneOS.platform
やAppleTVOS.platform
など、他のプラットフォーム用のフォルダーが見つかる可能性があります。それらの中で、Developer/SDKs
はそれらのプラットフォームのSDKにつながります。