CLion 2020.2 Help

Makefiles

You can load Makefile projects in CLion and benefit from all the smart features the IDE provides.

Note that Makefiles support in CLion is in its early stages. Use the tickets linked to CPP-494 to leave your feedback and vote for the desired features. The list of the open-source projects that Makefile support has been tested on is available on the confluence page.

Open a Makefile project

  1. Select File | Open from the main menu.

  2. Point CLion to a folder that contains the top-level Makefile or to that file directly:

    Opening a Makefile project

  3. In the dialog that opens, click Open as Project.

    Opening a Makefile as a project

  4. You will be prompted to clean the project:

    Load project dialog

    Cleaning is required for the project load as the Make build is incremental and only the updated files are compiled. When run on an uncleaned project, reload will miss all the unchanged files and might perform incorrectly.

    Clear the Clean project checkbox if you prefer to load without cleaning. You will be able to clean and reload your project later (for example, after performing the required bootstrapping).

  5. At this point, CLion starts loading the project, displaying the progress and status in the Build tool window:

    Project loading status in the Build tool window

    Warning messages may appear during the process, but if loading finishes with a green checkmark Successful load indicator next to the project name, this indicates a successful load. Take a look at the Troubleshooting section if your project fails to load correctly.

Configure auto-reload

By default, CLion doesn't update or reload your project automatically except for the cases of external events like VCS update. You can change this behavior in the Build Tools settings.

  1. Go to Settings / Preferences | Build, Execution, Deployment | Build Tools.

  2. Select one of the auto-reload options:

    Auto-reload settings
    • Any changes - project reload will be triggered on any change in Makefiles.

    • External changes (default) - your project will be reloaded only upon external events like VCS update. In case of other changes (for example, when you add a new file), you will get a notification on the Makefile:

      Makefile reload notification

Reload manually

Apart from the automatic options, you can also reload your project manually:

  • Call Reload Makefile Project or Clean and Reload Makefile Project from Tools | Makefile on the main menu.

    Tools | Makefiles menu

  • Alternatively, click the Refresh icon in the Build tool window:

    Project reload icon in the Build tool window

Adjust the project settings

Use the Settings / Preferences | Build, Execution, Deployment | Makefile dialog to control your project settings.

Makefile settings
  • Toolchain

    Here you can select the toolchain to be used for loading the Makefile project.

    Note that NMake is not supported currently, so you can't use the Visual Studio toolchain directly. To work with it, you need to build the project separately using GNU Make.

  • Build options

    In this field, you can provide additional make options for the project build. These options don't affect the project reload.

  • Arguments

    These arguments are used by CLion when calling the make command to extract the project information.

  • Build target and Clean target

    These targets are used along the make command to extract the project information. If you leave the Build target field empty, CLion will take the first target specified in the project’s top Makefile.

    Also, the targets specified here are used when you call Build Project or Rebuild Project from the Build actions menu.

Create run/debug configurations

CLion provides a dedicated configuration template, Makefile Application, for your Makefile projects.

To add a configuration, go to Run | Edit Configurations, click icons.general.add.svg, and select Makefile Application from the list of templates:

Adding a Makefile Application configuration

In the Target field, you can choose one of the detected targets:

Targets selection for a Makefile Application configuration

Another option is to set a custom build target with type Make. Click icons.actions.inlayGear.svg next to the Target field, add (icons.general.add.svg) a new Make target, and fill in the parameters:

Custom targets for Makefile Application configurations

Other settings of the Makefile Application template are described on the reference page.

Troubleshooting

If your project fails to load correctly, try the following tips:

  • Check Makefile settings:

    1. Make sure to select a proper toolchain. Your project should build successfully in the selected environment.

    2. Arguments and Build target may need adjustments for the case of your project.

  • Call Tools | Makefile | Clean and Reload Makefile Project.

  • If none of the above helps, try cleaning the project cache from /makefiles in the system directory (for example, ~/Library/Caches/JetBrains/CLion2020.2/makefiles/postgrtipes.dc29ef09), then reload the project.

Current limitations and future plans

  • Makefile support in CLion is based on the algorithm that extracts compilation commands from the make output, so issues are possible is the project is interfering with it. For example, the project can suppress printing the directories or hide compilation flags. The latter happens in the case of various wrappers like libtool. Find the corresponding tickets in CLion's issue tracker: CPP-19305 and CPP-19549.

  • Non-GNU Makes like NMake or BSD Make are not supported at the moment (CPP-18723).

  • Unit testing configurations are not available for Makefile projects yet (CPP-20718).

  • Currently, changing the toolchain or other settings affecting the project load doesn't trigger reloading (CPP-18982)

  • There is a feature request for an ability to link Makefile to an existing project (CPP-20733).

  • Another feature request relates to expanding the support for GNU Autotool projects: add an ability to specify a "pre-configure" step that will be executed before Makefile analysis (CPP-16924).

Last modified: 16 October 2020