Как сделать CLion вставить сгенерированный код... in.cpp-файлы

генерация кода в CLion всегда приводит к тому, что методы реализуются в файлах заголовков, меня всегда учили, что они должны входить .cpp-файлы, как я могу изменить это поведение и это вообще возможно ?

пример :

в проекте, содержащем main.cpp и тестовый класс (test.ГЭС и тест.СРР.)

файл 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, я не изменился что угодно)

3 ответов


хорошо, у меня есть фактическое решение для вас. У меня была та же проблема, где я мог сделать alt + enter и я мог только автоматически генерировать для каждого метода. Вы можете обойти это с помощью alt + insert. Это вызывает меню генерации в Clion. Отсюда выберите generate definitions который вызовет меню, где вы можете либо просто выбрать все определения, либо выбрать несколько, которые вы действительно хотите создать.

Clion достаточно умен, чтобы знать, если вы уже создается определение, поэтому вам не нужно беспокоиться о повторяющихся определениях здесь. Я обнаружил, что с QT, однако, что некоторые классы имеют переопределения компилятора Meta Object, которые будут отображаться здесь, поэтому я удостоверяюсь, что не выбираю их при создании определений, но для большинства обычных случаев использования выбираю каждый элемент в generate definitions list будет просто генерировать вещи, которые вы фактически определили в заголовке.

Примечание Вы также можете щелкнуть правой кнопкой мыши по имени класса и перейти к Generate... и вам будет дано те же варианты.

EDIT: Примечание. Если вы действительно хотите поведение исходного автора, вы можете выбрать опцию "Создать на месте", как только вы доберетесь до экрана выбора функции создания определений


CLion фактически объявляет методы в файле заголовка и определяет их в.cpp-файл при условии, что он "знает", что оба файла связаны. Я заметил, что при создании новых исходных файлов вам нужно перезагрузить cmake (панель инструментов CMake > значок "перезагрузить проект CMake"), чтобы IDE взяла .cpp файл в учет, особенно если вы используете file(GLOB xxx) список исходных файлов.

пожалуйста, проверьте, что:

  • the .cpp файл указан в качестве источника для бинарных построен с с CMake
  • он правильно включает свой связанный заголовок
  • исходники и заголовочные файлы имеют одинаковое базовое имя

Примечание: CLion предоставляет простой способ переместить реализацию метода в исходный файл, если это необходимо. Наведите курсор на метод в заголовочном файле, нажмите Alt + Enter и нажмите кнопку Move function definition to source file.


у меня была такая же проблема, когда я впервые начал использовать CLion. Я смог определить, где реализовать методы, используя меню действий намерения (желтый глобус). Я был смущен, пытаясь использовать неправильную горячую клавишу.

в настоящее время в версии 2016.1.2:

  1. наведите курсор на метод.
  2. открыть Intention Actions меню, зависнув рядом и нажав на глобус, или нажав горячую клавишу
    • Windows По Умолчанию : alt + enter
    • OS X по умолчанию:option + enter
  3. выберите нужное действие.
    • Generate definition for function 'someFunction' чтобы добавить определение в исходный файл.
    • Create new function 'someFunction()' чтобы добавить определение в файл заголовка (где реализация уже выполнена в источнике).

enter image description here