如何配置Eclipse CDT以使用cmake?

37

如何配置CDT插件的Eclipse "Helios"版本以使用cmake?

cmake all 
CMake Error: The source directory "D:/javaworkspace/workspace/Planner/Debug/all" does not    exist.

Eclipse一直想使用“all”选项,我不知道如何停止它不使用它。

我在“偏好设置”的“构建行为”部分看到了“all”选项。我删除了它,但它仍然工作不正常(同样的错误)。


1
你应该使用Eclipse来生成CDT项目文件。它不是make的替代品。 - arrowd
7个回答

45

在Eclipse-CDT中,您不需要创建cmake项目,而是需要导入cmake项目。 以下是您应该执行的操作:

  1. 假设您的CMake项目源代码名称为“Planner”,其位于D:/javaworkspace/src/Planner

  2. 创建一个文件夹(文件夹必须平行于其他文件夹):D:/javaworkspace/build/Planner

  3. 进入文件夹D:/javaworkspace/build/Planner 并使用Eclipse生成器运行CMake:

     cmake ../../src/Planner -G"Eclipse CDT4 - Unix Makefiles"
    

    这将为您的Planner项目生成make文件。

  4. 要在Eclipse中导入,请执行以下操作:

    文件 -> 导入 -> C/C++ -> 作为Makefile项目导入现有代码

    然后选择D:/javaworkspace/build/Planner(具有make文件的构建输出文件夹)作为“现有代码位置”

但是,根据您的路径,我认为您正在使用Windows。在Windows中,CMake可以生成Visual Studio项目。如果您想使用CMake,建议先创建一个“hello world”项目,然后手动创建一个CMakeLists.txt文件(请记住,Eclipse不会创建CMake项目)。


我必须说,这个解决方案对我来说非常完美!对于那些尝试这个解决方案的人,请按照步骤进行。当您在Eclipse中加载项目时,可以在项目的“源目录”文件夹中访问您的代码。使用F3,我可以跳转到我的链接静态库中类型的声明(在按照本教程之前我无法做到这一点)!请注意,我正在使用Ubuntu 12.04,Eclipse Juno(4.2)和CMake 2.8.7。非常感谢! - jespestana
3
总的来说,最终总是要靠自己去做事。鉴于这一点,我还是会继续使用一个不错的文本编辑器和命令行。 - cib
@jespestana 这个解决方案是可行的(我的意思是,应用程序可以运行),但在导入项目后,Eclipse将所有包含标记为“未解析的包含[...]”。奇怪的是,它也会对“#include <iostream>”进行标记。您知道这个问题的解决方案吗?我现在应该包括一些库吗?(我正在尝试在Eclipse中运行PCL)。 - Szał Pał
1
@SzałPał 我停止使用Eclipse了。我目前使用Qtcreator,它与CMake非常好地集成在一起。在Qtcreator中,只需转到文件>>打开文件或项目并打开CMakeLists文件。如果项目已正确配置,则会打开并完美配置它。请查看此网站上的“打开CMake项目”:https://dev59.com/kmox5IYBdhLWcg3wFAU1#9663686?noredirect=1#comment39733256_9663686 - jespestana

28
我的最佳选择是cmake4eclipse,这是一个可通过市场获得的插件。
来自cmake4eclipse帮助文本的部分内容:
CMake for CDT需要一个现有的C/C++项目才能工作。它允许使用cmake作为生成器生成makefile,而不是CDT内置的生成器。有关详细信息,请参见启用CMake构建脚本生成。
要使用现有源代码设置新项目,请按照以下步骤操作:
- 检出您的源代码。 - 打开新的C/C++项目向导(“文件”=>“新建”=>“C项目”或“文件”=>“新建”=>“C++项目”)。
确保项目位置指向检出文件的根目录 - 对于项目类型,选择可执行文件,也可以选择共享库或静态库,这没有关系,该信息来自于您的CMakeLists.txt,但是CDT需要它。不要在此处选择Makefile项目! - 完成项目创建。
打开“项目属性”对话框。
- 选择“C/C++ Build”节点和“Builder Settings”选项卡,并确保自动生成Makefiles已被选中。 - 选择“Tool Chain Editor”节点并将“CMake Make Builder”设置为当前构建器。 - 如果您的顶级CMakeLists.txt不位于检出文件的根目录中,请选择“C/C++ General”“Path and Symbols”节点和“Source Location”选项卡。然后调整源文件夹以指向包含CMakeLists.txt文件的目录。这将告诉CDT索引器扫描您项目中的头文件。
专业提示:如果您错过了Binaries或Archives文件夹,请在检出文件的根目录中添加一个CMakeLists.txt文件。C/C++ 项目视图。构建项目。这将调用 cmake 来生成构建脚本(如果必要的话),然后调用 make。

不要尝试导入您使用 cmake -G Eclipse CDT4 - Unix Makefiles 手动创建的 Eclipse 项目,因为那样会让您走上经典的 Makefile 项目路线!

此插件最好的功能是它可以使用 cmake 导出的编译器选项来索引您的项目。

  • 打开“项目属性”对话框。
    • 选择“C/C++ General”节点和“预处理器包含路径、宏等”选项卡。选择“CMAKE_EXPORT_COMPILE_COMMANDS Parser”,并将其移到列表顶部。
    • 点击“确定”关闭对话框。现在确保触发一次构建并重新创建索引。

Provider tab

当我只使用“CDT GCC Build-In Compiler Settings”并添加像“-std=c++14”这样的内容到“获取编译器规范的命令”时,这修复了所有恶心的索引器问题。


3
太棒了!我喜欢你的风格! - leanid.chaika

6

在 Eclipse 中使用 CMAKE 构建 Makefile 项目(win 系统):

1)创建新的“使用现有代码创建 Makefile 项目

2)修改构建器设置(项目属性 -> C/C++ 构建 -> 构建器设置):

  • 构建命令:cmd /c "mkdir ${PWD} & cd /D ${PWD} && ${CMAKE} -G "Unix Makefiles" ${ProjDirPath} && make"

  • 构建目录:${workspace_loc:/IoT_SDK}/build/${ConfigName}

就这样!


4
除了接受的答案,你还需要指定Eclipse版本。
Eclipse Luna (4.4):
cmake -G"Eclipse CDT4 - Unix Makefiles" -D_ECLIPSE_VERSION=4.4 ../../src/Planner

Eclipse Kepler (4.3):

cmake -G"Eclipse CDT4 - Unix Makefiles" -D_ECLIPSE_VERSION=4.3 ../../src/Planner

2
指定Eclipse版本有什么影响?我在2.8.12文档中找不到任何关于_ECLIPSE_VERSION的提及... - benf

1
无论我使用什么方法,外部包含文件都没有被索引。这是因为CMAKE使用了“响应文件”,将所有的包含文件隐藏在这些文件中,而不是直接使用(-IPATH_TO_SOME_DIR)。为了禁用“响应文件”,我使用了以下命令:
SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES NO)
SET(CMAKE_C_USE_RESPONSE_FILE_FOR_INCLUDES NO)

为了让CMAKE显示gcc/g++的执行情况,我已将make构建目标修改为"all VERBOSE=1"。请注意,当您使用cmake4eclipse时,不需要这样做。
我使用版本号为2018-12(4.10.0)的eclipse和版本号为9.6的CDT。

1

另一种完全不同的方法。

  • 手动创建一个空的Eclipse项目。

  • 通过“项目属性 -> C/C++通用 -> 路径和符号 -> 源位置”链接源目录。

  • 在Debug和Release构建目录中使用“Make Targets视图”创建“Make Targets”。将“Make Target”字段留空,并将“command”字段设置为cmake -G "Unix Makefiles" <path/to/the/sources>

  • 当您双击所创建的“Make Target”时,它应该触发Debug/Release目录中的cmake调用。

  • 在“项目属性 -> C/C++ Build”中禁用内置的makefile生成器。

现在正常的构建应该可以工作了。它还将捕获CMakeLists.txt文件中的任何更改(在CMake能够处理的范围内)。

也许这里有一个更详细的描述:https://stackoverflow.com/a/38140914/4742108


1
这是一个旧问题,但值得更新一下。首先,制作cmake4eclipse的人将解析功能添加到了CDT中。该功能/错误已于2020年8月5日标记为“已解决-已修复”,因此应该会在下个月发布的Eclipse版本中实现。请参见: https://bugs.eclipse.org/bugs/show_bug.cgi?id=559674 另外要指出的是,您可以手动触发文件的解析:配置选项/索引在编辑器中打开的源文件和头文件。

Configuration Options / Index source and header files opened in editor


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接