对CLion使用本地Makefile而不是CMake


148

有没有一种方法可以将CLion配置为使用本地Makefile而不是CMake来编译代码?我似乎无法从构建选项中找到实现此目标的方法。

Answers:


142

更新:如果您正在使用CLion 2020.2,则它已经支持Makefile。如果您使用的是旧版本,请继续阅读。


即使当前仅支持CMake,您也可以指示CMake make使用您的custom 进行调用Makefile。编辑您CMakeLists.txt添加的以下两个命令之一:

当您告诉CLion您运行程序时,它将尝试在指向的目录中找到与目标名称相同的可执行文件PROJECT_BINARY_DIR。因此,只要您makeCLion预期生成文件,就不会有问题。

这是一个工作示例:

告诉CLion将其$(PROJECT_BINARY_DIR)传递给make

这是示例CMakeLists.txt

cmake_minimum_required(VERSION 2.8.4)
project(mytest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

add_custom_target(mytest COMMAND make -C ${mytest_SOURCE_DIR}
                         CLION_EXE_DIR=${PROJECT_BINARY_DIR})

告诉make在CLion's目录中生成可执行文件

这是示例Makefile

all:
    echo Compiling $(CLION_EXE_DIR)/$@ ...
    g++ mytest.cpp -o $(CLION_EXE_DIR)/mytest

就是这样,您可能还想更改程序的工作目录,以便在您从目录内部运行make时按原样执行。对于此编辑:Run -> Edit Configurations ... -> mytest -> Working directory


我还没有尝试过您的上述建议,但是如果这样做,我是否可以在CLion中执行C / C ++程序?(这将使调试过程更加容易。)
得多

3
我确认@Mondkin的解决方案有效。如果您在修改Makefile和之后无法构建项目CMakeLists.txt,请尝试修改*.cpp文件。这将使CLion从头开始构建所有内容。
hlin117

这可行,但是当我尝试向配置中添加“ make clean”时,它失败了。
2015年

1
仅供参考,要使其至少在某些项目(例如redis)上起作用,您必须添加一个“ ALL”,使其成为:add_custom_target(mytest ALL COMMAND make -C $ {mytest_SOURCE_DIR} CLION_EXE_DIR = $ {PROJECT_BINARY_DIR} )
Decker

1
我应该进行哪些更改才能使其与gcc for C配合使用
Romain-p

33

虽然这是最受好评的功能请求之一,但是有一个由Victor Kropp提供的插件可以为makefile添加支持:

IntelliJ IDEA的Makefile支持插件

安装

您可以直接从官方存储库安装:

设置>插件>搜索makefile>在存储库中搜索>安装>重新启动

至少有三种不同的运行方式:

  1. 右键单击一个makefile,然后选择 “运行”
  2. 在编辑器中打开makefile,将光标放在一个目标上(在行中的任何位置),按alt+ enter,然后选择make target
  3. ctrl/ cmd+ shift+F10上的目标(虽然这其中并没有为我在Mac上工作)。

它将打开一个名为Run target的窗格,并显示输出。


2
只是一个提示,如果您走这条路,请确保进入settings-> make并确保将插件指向make的安装目录。默认情况下,它看起来在/ usr / bin中/化妆
泰勒利斯

5
我尝试了您的方法,但这仅给您构建项目的机会,对吧?我无法运行使用此插件构建的应用程序,还是会错过某些内容?我有一个项目,其中包含一个非常复杂的Makefile,并且我不想为其编写CMake文件,但我想使用CLion对其进行调试...
blacktemplar

@blacktemplar我不知道您是否可以使用CLion的所有调试工具,但是我应该能够编译和调试使用上述方法创建的二进制文件。我只是玩了一点,就可以使用例如步进控制按钮。
il in

2
对于更复杂的配置,这比接受的答案要容易得多。仅编辑makefile来运行该makefile是疯狂的!
凯文(Kevin)

1
您如何在clion中运行生成的二进制文件?我为Application创建了一个新配置,然后目标:所有目标,可执行文件:二进制文件的名称,但是我收到以下错误消息:“无法binary在<default>上运行”
Kennet Celeste18年

7

最新版本可通过compiletedb从字面上更好地支持所有生成的Makefile

三个步骤:

  1. 安装compiledb

    pip install compiledb
    
  2. 干干

    compiledb -n make 
    

    (执行自动生成,根据需要进行配置)

  3. 将在项目中生成一个compile_commands.json文件,您将看到CLion将从json文件中加载信息。如果您的CLion仍然尝试找到CMakeLists.txt而无法读取compile_commands.json,请尝试删除整个文件夹,重新下载源文件,然后重做步骤1,2,3

原始帖子:使用编译数据库在CLion中使用Makefile


1
不错,Jetbrains正在解决该问题,但是截至2018年11月16日,它没有用,因为您无法调试生成的可执行文件。
gerardw '18

3

为了完全避免使用CMAKE,您可以:

  1. 通常,通过终端使用Make来构建项目。

  2. 更改您的CLion配置,转到(在顶部栏中):
    Run -> Edit Configurations -> yourProjectFolder

  3. 将更Executable改为使用Make生成的

  4. 将更Working directory改为保存可执行文件的文件夹(如果需要)

  5. 删除框中的Build任务Before launch:Activate tool window

一切准备就绪!现在,您可以在手动构建后使用调试按钮。


1
正如您所描述的,即使设置并存在可执行文件,我的配置也会说“没有任何基础”。

没错 您应该手动构建然后运行(不构建)。请注意,最新版本的CLion似乎更好地支持MakeFiles。此解决方案仍然有效,但我认为它已弃用
13013SwagR

您对最新版本有何建议?我有makefile插件,但它不处理编译/调试。

您应该可以编译,我猜想也可以使用Makefile插件进行调试。请参阅Clion文档。。虽然,我建议您使用完全支持的CMake并避免所有麻烦。您也可以使用远程调试模板进行设置(我认为),或者直接在控制台中使用GDB。
13013SwagR

1

当前,CLion仅支持CMake。将来会添加其他构建系统,但是目前,您只能使用CMake。

导入器工具已实现,可帮助您使用CMake。

编辑:

资料来源:http : //blog.jetbrains.com/clion/2014/09/clion-answers-frequently-asked-questions/


看到这个帖子已经发布了一个月了,这是唯一的回应,很遗憾,我坚信您是正确的……
hlin117 2014年

深入研究评论的来源,我发现了这一点:youtrack.jetbrains.com/issue/CPP-494#tab=Comments
hlin117 2015年

如果您不想使用cmake怎么办?
Enerccio '16

1

我对CMake不太熟悉,无法直接使用Mondkin的解决方案。

这是我使用最新版本的CLion(1.2.4)和Windows上的MinGW在CMakeLists.txt中想到的(我想您只需要替换所有内容即可:g ++ mytest.cpp -o bin / mytest用make if您没有使用相同的设置):

cmake_minimum_required(VERSION 3.3)
project(mytest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

add_custom_target(mytest ALL COMMAND mingw32-make WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

自定义的Makefile就是这样(它位于我项目的根目录下,并在bin目录中生成可执行文件):

all:
    g++ mytest.cpp -o bin/mytest

我能够生成可执行文件,并且可以单击日志窗口中的错误。

IDE中的提示非常有限,与纯CMake项目相比,这是一个很大的限制...


这对我有用。通过将所有文件都包含在我的文件中set(SOURCE_FILES all_files_here.c),然后再添add_executable(foobar_cmake ${SOURCE_FILES})加到自定义目标中,我可以让CLion识别我的源文件为“活动”文件。然后只需确保将CLion设置为构建/运行您的自定义目标,而不是_cmake一个。
凯文·马克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.