如何使 CLion 在 .cpp 文件中插入生成的代码....

Posted

技术标签:

【中文标题】如何使 CLion 在 .cpp 文件中插入生成的代码....【英文标题】:How to make CLion insert generated code.... in .cpp files 【发布时间】:2016-01-16 11:44:26 【问题描述】:

在 CLion 中生成代码总是导致在头文件中实现方法,我一直被告知它们应该放在 .cpp 文件中,我该如何改变这种行为,甚至可能吗?

例子:

在包含 main.cpp 和测试类(test.hpp 和 test.cpp)的项目中。

CMake文件如下:

cmake_minimum_required(VERSION 3.3)
project(testClion)

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

set(SOURCE_FILES main.cpp
                test.cpp
                test.hpp)
add_executable(testClion $SOURCE_FILES)

(注意这是clion提供的默认文件,我没改过)

test.hpp

#ifndef TESTCLION_TEST_HPP
#define TESTCLION_TEST_HPP

class test

 protected:
  int test;
;


#endif //TESTCLION_TEST_HPP

test.cpp

#include "test.hpp"

在 test.hpp 或 test.cpp 中按 ALT + INSERT 并生成 getter/setter 只会更改 test.hpp:

test.hpp

#ifndef TESTCLION_TEST_HPP
#define TESTCLION_TEST_HPP

class test


 public:
  int getTest() const
  
    return test;
  
  void setTest(int test)
  
    test::test = test;
  
 protected:
  int test;
;


#endif //TESTCLION_TEST_HPP

【问题讨论】:

【参考方案1】:

好的,我有一个实际的解决方案给你。我有同样的问题,我可以做alt + enter,我只能自动生成每个方法。您可以通过使用alt + insert 解决此问题。这会在 Clion 中打开生成菜单。从这里选择generate definitions,这将打开一个菜单,您可以在其中选择所有定义或选择您实际想要生成的几个定义。

Clion 足够聪明,可以知道您是否已经生成了定义,因此您不必担心此处的重复定义。我发现在 QT 中,某些类具有将显示在此处的 Meta Object Compiler 覆盖,因此我确保在创建定义时不要选择那些,但对于大多数正常用例,选择 generate definitions 列表中的每个元素将只需生成您在标题中实际定义的内容。

请注意,您也可以右键单击您的班级名称并转到Generate...,您将获得相同的选项。

编辑:请注意,如果您确实想要原作者的行为,则可以在进入生成定义功能选择屏幕后选择“就地生成”选项

【讨论】:

这会在 cpp 文件或 hpp 中生成方法吗?我已经在使用 ALT INSERT 并在 hpp 中生成 @QuentinSommer 肯定会在 cpp 中生成方法,不管它的 getter 和 setter 还是函数定义。你用的是什么版本? 好吧,我必须说我已经超过 1 年没有使用 CLION,我会相信你并将你的答案标记为接受未来访问者!谢谢 @QuentinSommer 确认我确保您上面的场景与我自己的项目所经历的一样,没有任何改变,它仍然会在源 cpp 文件中正确生成,一定有以前版本中的错误。 那么完美!【参考方案2】:

CLion 实际上在头文件中声明方法并在 .cpp 文件中定义它们,前提是它“知道”两个文件是相关的。我注意到在创建新源文件时,您必须重新加载 cmake(CMake 工具栏 >“重新加载 CMake 项目”图标),以便 IDE 将 .cpp 文件考虑在内,尤其是在您使用 file(GLOB xxx) 列出源文件时。

还请检查:

.cpp 文件被列为使用 cmake 构建的二进制文件的源 它正确地包含了它的相关标题 源文件和头文件具有相同的基本名称

注意:如果需要,CLion 提供了一种将方法实现移动到源文件的简单方法。将光标放在头文件中的一个方法上,按Alt + Enter,然后点击Move function definition to source file

【讨论】:

您好,我无法让您的解决方案发挥作用。我已经编辑了我的问题以添加更多详细信息【参考方案3】:

当我第一次开始使用 CLion 时,我遇到了同样的问题。通过使用 Intention Actions 菜单(黄色球体),我能够定义在何处实现这些方法。我因尝试使用错误的热键而感到困惑。

当前版本为 2016.1.2:

    将光标放在方法上。 通过将鼠标悬停在附近并单击地球或按热键来打开 Intention Actions 菜单 Windows 默认:alt + enter OS X 默认:option + enter 选择相关操作。 Generate definition for function 'someFunction' 在源文件中添加定义。 Create new function 'someFunction()' 将定义添加到头文件中(在源代码中已经完成了实现)。

【讨论】:

嗨,我注意到了这种方法,但是它很慢,你必须手动为每种方法生成,这不是我要找的 不用担心。我找不到任何批量生成源的方式。

以上是关于如何使 CLion 在 .cpp 文件中插入生成的代码....的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Clion 中为 .h 文件自动生成函数头?

clion编译jni,找不到jni.h的解决办法

Clion切换主代码文件运行

如何使用以下make和pkg-config使clion工作?

CLin 和 IDEA创建文件时自动添加作者和时间信息 + 多个.cpp文件在CLion下运行问题

如何在 CLion 中启用 C++11?