【问题标题】:Using local makefile for CLion instead of CMake为 CLion 使用本地 makefile 而不是 CMake
【发布时间】:2015-01-11 03:55:49
【问题描述】:

有没有办法将 CLion 配置为使用本地 makefile 来编译代码,而不是 CMake?我似乎无法从构建选项中找到方法。

【问题讨论】:

    标签: makefile clion


    【解决方案1】:

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


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

    当您告诉CLion 运行您的程序时,它会尝试在PROJECT_BINARY_DIR 指向的目录中查找与目标同名的可执行文件。所以只要你的make生成CLion期望的文件就没有问题了。

    这是一个工作示例:

    告诉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++ 程序吗? (这将使调试过程更容易。)
    • 我验证了@Mondkin 的解决方案有效。如果您在修改 MakefileCMakeLists.txt 后无法构建项目,请尝试修改 *.cpp 文件。这将使 CLion 从头开始​​构建所有内容。
    • 这行得通,但是当我尝试将“make clean”添加到配置中时它失败了。
    • 仅供参考,为了让它工作,至少在某些项目上,(例如redis),你必须添加一个'ALL',使它:add_custom_target(mytest ALL COMMAND make -C ${ mytest_SOURCE_DIR} CLION_EXE_DIR=${PROJECT_BINARY_DIR})
    • 我应该改变什么以使其与 gcc for C 一起使用
    【解决方案2】:

    虽然这是投票最多的feature requests 之一,但Victor Kropp 提供了一个plugin,它增加了对makefile 的支持:

    Makefile support plugin for IntelliJ IDEA

    安装

    你可以直接从官方仓库安装:

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

    使用

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

    1. 右键单击生成文件并选择运行
    2. 在编辑器中打开 makefile,将光标放在一个目标上(行中的任意位置),点击 alt + enter,然后选择 ma​​ke 目标
    3. 在目标上按 ctrl/cmd + shift + F10(虽然这个没有用适合我在 Mac 上使用)。

    它会打开一个名为 Run target 的窗格,其中包含输出。

    【讨论】:

    • 只是提醒一下,如果你走这条路,请确保进入 settings->make 并确保将插件指向 make 的安装目录。默认情况下,它在 /usr/bin/make 中查找
    • 我尝试了你的方法,但这只会给你构建项目的机会,对吧?我无法运行使用此插件使用 make 构建的应用程序,或者我错过了什么?我有一个项目,它有一个非常复杂的 Makefile,我不想为它写一个 CMake 文件,但我想使用 CLion 来调试它...
    • @blacktemplar 我不知道你是否可以使用 CLion 的所有调试工具,但我应该能够编译和调试使用上述方法创建的二进制文件。我只是玩了一下,例如,我能够使用步进控制按钮。
    • 对于更复杂的配置,这比公认的答案容易得多。编辑 makefile 只是为了运行 makefile 是疯狂的!
    • 你是如何在 clion 中运行生成的二进制文件的?我为 Application 创建了一个新配置,然后目标:所有目标,可执行文件:二进制文件的名称,但我收到此错误:“无法在 上运行 binary
    【解决方案3】:

    最新版本通过compiledb更好地支持任何生成的Makefile

    三个步骤:

    1. 安装编译的b

      pip install compiledb
      
    2. 进行干制作

      compiledb -n make 
      

      (做自动生成,如果需要配置)

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

    原帖:Working with Makefiles in CLion using Compilation DB

    【讨论】:

    • 很好,Jetbrains 正在解决这个问题,但截至 2018 年 11 月 16 日,它没有用处,因为您无法调试生成的可执行文件。
    • @gerardw 我猜你可以修改原始makefile中的CFLAGS,这样生成的compile_commands.json就会添加那些调试符号。
    【解决方案4】:

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

    1. 像往常一样通过终端使用 Make 构建项目。

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

    3. Executable改成Make生成的那个

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

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

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

    【讨论】:

    • 即使可执行文件已设置并存在,我的配置仍显示“没有可构建的内容”。
    • 没错。您应该手动构建然后运行(不构建)。请注意,最新版本的 CLion 似乎更好地支持 MakeFiles。该解决方案仍然有效,但我认为它是已弃用
    • 您对最新版本有何建议?我有 makefile 插件,但它不处理编译/调试。
    • 你应该能够编译,我猜也可以使用 Makefile 插件进行调试。请参阅Clion Doc.。不过,我建议您使用完全支持并避免所有麻烦的 CMake。您也可以使用远程调试模板进行设置(我认为),或者直接在控制台中使用 GDB。
    【解决方案5】:

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

    已经实现了一个导入器工具来帮助您使用 CMake。

    编辑:

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

    【讨论】:

    【解决方案6】:

    我对CMake不是很熟悉,无法直接使用Mondkin的方案。

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

    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 目标。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2018-12-08
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多