How to check if XCode command line tools are installed?
Asked Answered
D

14

160

I have a macbook pro with OS X 10.8.2. XCode is installed. I know this as it appears in the Applications directory. There are also the xcodebuild and xcode-select files in /usr/bin. I need to know if the command line tools is installed. Is there a command for it? hat can I do to see if XCode CLT is installed and if yes to find the version installed?

Desperate answered 12/3, 2013 at 20:54 Comment(3)
The version of XCode is 4.6Desperate
xcode-select -p; echo $? 0 yes, 2 no for recent versionsRubbing
I am on OSX Sonoma 14.0 (23A344) and also would like to know.Accompanyist
P
157

10.15 Catalina Update:

See Yosemite Update.

10.14 Mojave Update:

See Yosemite Update.

10.13 High Sierra Update:

See Yosemite Update.

10.12 Sierra Update:

See Yosemite Update.

10.11 El Capitan Update:

See Yosemite Update.

10.10 Yosemite Update:

Just enter in gcc or make on the command line! OSX will know that you do not have the command line tools and prompt you to install them!

To check if they exist, xcode-select -p will print the directory. Alternatively, the return value will be 2 if they do NOT exist, and 0 if they do. To just print the return value (thanks @Andy):

xcode-select -p 1>/dev/null;echo $?

10.9 Mavericks Update:

Use pkgutil --pkg-info=com.apple.pkg.CLTools_Executables

10.8 Update:

Option 1: Rob Napier suggested to use pkgutil --pkg-info=com.apple.pkg.DeveloperToolsCLI, which is probably cleaner.

Option 2: Check inside /var/db/receipts/com.apple.pkg.DeveloperToolsCLI.plist for a reference to com.apple.pkg.DeveloperToolsCLI and it will list the version 4.5.0.

[Mar 12 17:04] [jnovack@yourmom ~]$ defaults read /var/db/receipts/com.apple.pkg.DeveloperToolsCLI.plist
{
    InstallDate = "2012-12-26 22:45:54 +0000";
    InstallPrefixPath = "/";
    InstallProcessName = Xcode;
    PackageFileName = "DeveloperToolsCLI.pkg";
    PackageGroups =     (
        "com.apple.FindSystemFiles.pkg-group",
        "com.apple.DevToolsBoth.pkg-group",
        "com.apple.DevToolsNonRelocatableShared.pkg-group"
    );
    PackageIdentifier = "com.apple.pkg.DeveloperToolsCLI";
    PackageVersion = "4.5.0.0.1.1249367152";
    PathACLs =     {
        Library = "!#acl 1\\ngroup:ABCDEFAB-CDEF-ABCD-EFAB-CDEF0000000C:everyone:12:deny:delete\\n";
        System = "!#acl 1\\ngroup:ABCDEFAB-CDEF-ABCD-EFAB-CDEF0000000C:everyone:12:deny:delete\\n";
    };
}
Pantomimist answered 12/3, 2013 at 20:56 Comment(16)
Thanks for the answer. But this will say if gcc is installed. Is there no way to find the clt version itself?Desperate
I found that opening xcode>Preferences>Downloads>Components had a Command Line Tools entry which was in the update state and when I updated it, it shows the status as installedDesperate
Updated the answer. If this is correct, would you kindly accept as answer?Pantomimist
@Novack Thank you. Appreciated..:PDesperate
Rather than reaching into the /var/db/receipts directory, you can use the API for it: pkgutil --pkg-info=com.apple.pkg.DeveloperToolsCLIPolite
For anyone using Rob Napier's solution, it returns No receipt for 'com.apple.pkg.DeveloperToolsCLI' found at '/'. if you don't have the command line tools installed (I was installing the command line tools as part of a server setup script and needed a way to check if they weren't installed).Underbody
I might be mistaken, but the receipt name is now CLTools_Executables at least that's all I find under OS Mavericks. The command would then be: pkgutil --pkg-info=com.apple.pkg.CLTools_ExecutablesSledge
Seems that it will show this: /Applications/Xcode.app/Contents/Developer from xcode-select -pElectroanalysis
noticed same thing as Jordan. the xcode-select doesn't return an int, just the pathLuxuriate
I entered xcode-select-p, only to get /Applications/Xcode.app/Contents/Developer. What does it mean?Execrate
If you'd like to see the int value, run xcode-select -p 1>/dev/null;echo $?Fairchild
The 10.10 solution still applies to 10.12.Ravelment
xcode-select -p actually gives you the path for CommandLineTools.Commingle
I've found that if the full XCode is installed right away, com.apple.pkg.DeveloperToolsCLI does not show up even though they are clearly all available and subsumed by XCode.Duntson
Can you update this answer for the latest operating systems? Thanks.Eckstein
Hasn't changed since 10.10. Are you seeing something different?Pantomimist
C
81

10.10 Yosemite

Below are a few extra steps on a fresh Mac that some people might need. This adds a little to @jnovack's excellent answer.

Update: A few other notes when setting this up:

Make sure your admin user has a password. A blank password won't work when trying to enable a root user.

System Preferences > Users and Groups > (select user) > Change password

Then to enable root, run dsenableroot in a terminal:

$ dsenableroot
username = mac_admin_user
user password:
root password:
verify root password:

dsenableroot:: ***Successfully enabled root user.

Type in the admin user's password, then the new enabled root password twice.

Next type:

sudo gcc

or

sudo make

It will respond with something like the following:

WARNING: Improper use of the sudo command could lead to data loss
or the deletion of important system files. Please double-check your
typing when using sudo. Type "man sudo" for more information.

To proceed, enter your password, or type Ctrl-C to abort.

Password:


You have not agreed to the Xcode license agreements. You must agree to 
both license agreements below in order to use Xcode.

Press enter when it prompts to show you the license agreement.

Hit the Enter key to view the license agreements at 
'/Applications/Xcode.app/Contents/Resources/English.lproj/License.rtf'

IMPORTANT: BY USING THIS SOFTWARE, YOU ARE AGREEING TO BE BOUND BY THE 
FOLLOWING APPLE TERMS:

//...

Press q to exit the license agreement view.

By typing 'agree' you are agreeing to the terms of the software license 
agreements. Type 'print' to print them or anything else to cancel, 
[agree, print, cancel]

Type agree. And then it will end with:

clang: error: no input files 

Which basically means that you didn't give make or gcc any input files.

Here is what the check looked like:

$ xcode-select -p
/Applications/Xcode.app/Contents/Developer

10.9 Mavericks

With Mavericks, it is a little different now.

When the tools were NOT found, this is what the command pkgutil command returned:

$ pkgutil --pkg-info=com.apple.pkg.CLTools_Executables
No receipt for 'com.apple.pkg.CLTools_Executables' found at '/'.

To install the command line tools, this works nicely from the Terminal, with a nice gui and everything.

$ xcode-select --install

http://macops.ca/installing-command-line-tools-automatically-on-mavericks/

When they were found, this is what the pkgutil command returned:

$ pkgutil --pkg-info=com.apple.pkg.CLTools_Executables
package-id: com.apple.pkg.CLTools_Executables
version: 5.0.1.0.1.1382131676
volume: /
location: /
install-time: 1384149984
groups: com.apple.FindSystemFiles.pkg-group com.apple.DevToolsBoth.pkg-group com.apple.DevToolsNonRelocatableShared.pkg-group 

This command returned the same before and after the install.

$ pkgutil --pkg-info=com.apple.pkg.DeveloperToolsCLI
No receipt for 'com.apple.pkg.DeveloperToolsCLI' found at '/'.

Also I had the component for the CLT selected and installed in xcode's downloads section before, but it seems like it didn't make it to the terminal...

Cassiopeia answered 11/11, 2013 at 6:14 Comment(5)
Can you update this answer for the latest operating systems? Thanks.Eckstein
I called sudo rm -rf /Library/Developer/CommandLineTools and then xcode-select --install.Herschel
@Execrate You got /Applications/Xcode.app/Contents/Developer on running xcode-select-p because that is how the path is in Mac Sierra.Odin
I'm on Catalina with Xcode 11.3 installed, so I should use the "Yosemite Update", right? Whether I use sudo or not, both make and gcc simply complain that xcrun is missing.Carcinogen
The problem apprears to be thatI have both Xcode 10.1 and 11.3 installed. As suggested in another thread on Updating CLT, running sudo xcode-select --switch /Applications/Xcode11.3.app (using the path to my 11.3 version) cleared things up for me.Carcinogen
K
68

To check if command line tools are installed run:

xcode-select --version

// if installed you will see the below with the version found in your system
// xcode-select version 1234.

If command line tools are not installed run:

xcode-select --install
Ky answered 10/3, 2017 at 17:23 Comment(2)
Simple and effective. Might be the best answer.Libeler
Saved a lot of time. Thanks mate!Mcgruter
J
20

In macOS Catalina, and possibly some earlier versions, you can find out where the command line tools are installed using:

xcode-select -p a.k.a. xcode-select --print-path

Which will, if it is installed, respond with something like:

/Library/Developer/CommandLineTools

To find out which version you have installed there, you can use:

xcode-select -v a.k.a. xcode-select --version

Which will return something like:

xcode-select version 2370.

However, if you attempt to upgrade it to the latest version, assuming it is installed, using this:

xcode-select --install

You will receive in response:

xcode-select: error: command line tools are already installed, use "Software Update" to install updates

Which rather erroneously gives the impression you need to use Spotlight find something called 'Software Update'. In actual fact, you need to continue in the Terminal, and use this:

softwareupdate -i -a a.k.a. softwareupdate --install --all

Which tries to update everything it can and may well respond with:

Software Update Tool

Finding available software
No new software available.

To find out which versions of the different Apple SDKs are installed on your machine, use this:

xcodebuild -showsdks

Jeanninejeans answered 11/11, 2019 at 12:26 Comment(0)
N
16

On macOS Sierra (10.12) :

  1. Run the following command to see if CLT is installed:

    xcode-select -p
    

    this will return the path to the tool if CLT is already installed. Something like this -

    /Applications/Xcode.app/Contents/Developer
    
  2. Run the following command to see the version of CLT:

    pkgutil --pkg-info=com.apple.pkg.CLTools_Executables
    

    this will return version info, output will be something like this -

    package-id: com.apple.pkg.CLTools_Executables
    version: 8.2.0.0.1.1480973914
    volume: /
    location: /
    install-time: 1486372375
    
Nimble answered 6/2, 2017 at 10:23 Comment(0)
N
13

I think the simplest way which worked for me to find Command line tools is installed or not and its version irrespective of what macOS version is

$brew config

macOS: 10.14.2-x86_64
CLT: 10.1.0.0.1.1539992718
Xcode: 10.1

This when you have Command Line tools properly installed and paths set properly.

Earlier i got output as below
macOS: 10.14.2-x86_64
CLT: N/A
Xcode: 10.1

CLT was shown as N/A in spite of having gcc and make working fine and below outputs

$xcode-select -p              
/Applications/Xcode.app/Contents/Developer
$pkgutil --pkg-info=com.apple.pkg.CLTools_Executables
No receipt for 'com.apple.pkg.CLTools_Executables' found at '/'.
$brew doctor
Your system is ready to brew.

Finally doing xcode-select --install resolved my issue of brew unable to find CLT for installing packages as below.

Installing sphinx-doc dependency: python
Warning: Building python from source:
  The bottle needs the Apple Command Line Tools to be installed.
  You can install them, if desired, with:
    xcode-select --install
Novak answered 14/2, 2019 at 6:58 Comment(1)
Clear and simple one. Much appreciated.Odin
I
2

to use on a bash script:

if ! command -v xcode-select &> /dev/null
then
    echo "\t xcode was not found! You need to manually install it :/ "
else
    echo "xcode is installed, checking other IOS build tools"
fi
Illtimed answered 11/11, 2021 at 15:15 Comment(0)
A
1

Go to Applications > Xcode > preferences > downloads

You should see the command line tools there for you to install.

Abbeyabbi answered 2/12, 2013 at 20:53 Comment(0)
S
1

From a programmatic perspective the Homebrew folks have a check for the existence of various files to determine if the command line tools are installed. Currently it always checks for /Library/Developer/CommandLineTools/usr/bin/git and will also check for /usr/include/iconv.h if the OS version is 10.13 or below.

Spinney answered 19/9, 2018 at 9:54 Comment(0)
V
1

Open your terminal and check to see if you have Xcode installed already with this:

xcode-select -p

in return, if you get this:

/Library/Developer/CommandLineTools

That means you have that Xcode is installed.

Another way you can check would you if you have "HomeBrew" installed you can use the following command to see if you have Xcode and the version:

brew config

And finally, if you don't have the Xcode follow this link to download the Xcode from the Appstore. Xcode from the App Store.

Good Luck.

Venable answered 12/5, 2020 at 20:48 Comment(0)
S
1

Some contributors write when xcode-select -p or xcode-select -print-path would return /Library/Developer/CommandLineTools that this would mean that CLTs are installed. This is not really correct as xcode-select can be used to switch among multiple Xcode installations and CLTs. Aforementioned commands merely return which development environment is currently in use, i.e. which Xcode or whether CLTs are currently in use. The returned path to some also installed Xcode may then be returned and you cannot deduce from this whether CLTs are actually installed or not.

Moreover, as Apple recommends even to simply delete CLTs by deleting the directory /Library/Developer/CommandLineTools before a reinstallation it may well be that aforementioned commands return /Library/Developer/CommandLineTools despite the fact that they are no longer installed. Even the use of pkgutil is no warranty that CLTs are really installed if directory /Library/Developer/CommandLineTools was previously simply deleted.

The most robust technique is therefore xcode-select --install and the macOS will invite you to install CLTs via an alert, which you can cancel if you wish only to learn about the presence or absence of CLTs. If you prefer a method without any GUI, e.g. in a shell script, then testing for the presence of directory /Library/Developer/CommandLineTools and pkgutil returning "No receipt..." as described above are AFAIK a way to go. E.g. code similar to following

theCLTversion=`pkgutil --pkg-info=com.apple.pkg.CLTools_Executables 2>/dev/null | grep version`
if [ -d /Library/Developer/CommandLineTools ] && [ "$theCLTversion" != "" ]; then
    echo "CLTs $theCLTversion installed"
else
    echo "CLTs seem not to be installed"
fi

may do the job. However, I have not tested above snippet to lead to correct results on older systems prior to OS X 10.11.6 (El Capitan).

Summary answered 23/1, 2023 at 7:42 Comment(0)
D
0

Because Xcode subsumes the CLI tools if installed first, I use the following hybrid which has been validated on 10.12 and 10.14. I expect it works on a lot of other versions:

installed=$(pkgutil --pkg-info=com.apple.pkg.CLTools_Executables 2>/dev/null || pkgutil --pkg-info=com.apple.pkg.Xcode)

Salt with awk to taste for branching logic.

Of course xcode-select -p handles the variations with a really short command but fails to give the detailed package, version, and installation date metadata.

Duntson answered 2/1, 2019 at 18:54 Comment(0)
R
0

% xcode-select -h Usage: xcode-select [options]

Print or change the path to the active developer directory. This directory controls which tools are used for the Xcode command line tools (for example, xcodebuild) as well as the BSD development commands (such as cc and make).

Options: -h, --help print this help message and exit -p, --print-path print the path of the active developer directory -s , --switch set the path for the active developer directory --install open a dialog for installation of the command line developer tools -v, --version print the xcode-select version -r, --reset reset to the default command line tools path

Resistencia answered 15/12, 2020 at 14:59 Comment(0)
F
0

Run the command xcode-select --install

The answer for this is very simple actually, and for any application for that matter, just try to reinstall it,

It will either install it or it will show you the error, you can stop the process if you don't want.

Terminal output

Flavourful answered 7/1, 2023 at 6:25 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.