Code::Blocks — как скомпилировать несколько исходных файлов

#c #codeblocks

#c #codeblocks

Вопрос:

Я пытаюсь скомпилировать программу с несколькими исходными файлами — двумя CPP-файлами и файлом заголовка, с code::blocks. В качестве примера я создал следующие три файла (пример программы, созданной кем-то другим на другом форуме):

main.cpp:

 #include <stdio.h>
#include "other.h"

int main (void)
{
    printf("%dn", getfavoritenumber());

    return 0;
}
  

other.cpp

 #include "other.h"

int getfavoritenumber(void)
{
    return 3;
}
  

other.h

 #ifndef _OTHER_H_
#define _OTHER_H_

int getfavoritenumber(void);

#endif
  

Несмотря на то, что эти три файла должны ссылаться друг на друга, я получаю сообщение об ошибке «Этап компоновки пропущен (цель сборки не имеет объектных файлов для ссылки)», когда я пытаюсь собрать проект.

Что я делаю не так? Попытка скомпилировать отдельные файлы выдает ошибку «Этот файл не назначен ни одному целевому объекту».

Комментарии:

1. Какой тип проекта вы выбрали? Вы должны выбрать «консольное приложение».

Ответ №1:

Вот что сработало у меня:

Перейдите на левую панель с надписью projects и щелкните правой кнопкой мыши на файле .cpp. Выберите свойства, затем перейдите к сборке. Установите флажки под заголовком Принадлежит целям: «Debug» и «Release»

Ответ №2:

У меня была похожая проблема при создании моего первого проекта с несколькими исходными кодами. я полагаю, что проблема, с которой вы столкнулись, связана не со связыванием, а с вашим оператором #include для меня каталог отличался от того, что я ожидал. чтобы включить файл заголовка в проект, который мне пришлось написать #include "include/other.h" посмотрите, как устроена ваша система папок …. если бы вы могли опубликовать, какие папки / каталоги у вас есть в проекте, я мог бы дать вам лучший ответ.

Ответ №3:

У меня была похожая проблема, и я обнаружил, что если я просто закрыл проект, создал новое пустое консольное приложение, а затем импортировал существующие файлы, все начинало нормально компилироваться.

Комментарии:

1. Разве это не заставляет вас чувствовать, что Code:: blocks — это кусок дерьма?

Ответ №4:

Я сделал это:

  • Я создал консольный проект в Code::Blocks

  • Для каждого файла я File|New создал пустой файл, добавил его в проект с указанными вами именами и вставил соответствующий код из вашего вопроса в каждый файл.

  • Скомпилировал и запустил результирующий исполняемый файл.

Все сработало так, как ожидалось. Если у вас это не работает, пожалуйста, опишите, как вы создаете проект. Code::Blocks абсолютно необходим проект — он плохо работает с отдельными файлами. Если вы хотите этого, используйте GCC из командной строки.

Редактировать:

  • Обычно хорошей идеей является установка компилятора отдельно от CB, который на самом деле является всего лишь IDE. Я предполагаю, что здесь мы находимся на Windows. Перейдите к http://tdm-gcc.tdragon .подключитесь к Сети и загрузите оттуда последнюю версию компилятора GCC. Проверьте, что это работает из командной строки.

  • Затем в CB перейдите на Settings|Compiler and Debugger и выберите Toolchains executables вкладку. Затем перейдите в корень каталога, где вы установили содержимое TDM GCC (корневой, а не каталог bin в корневом каталоге), и все должно быть хорошо.

И если в конце дня это не сработает, попробуйте форумы поддержки CB по адресуhttp://forums.codeblocks.org .

Комментарии:

1. Я создаю проект точно так, как описано. Я также пробовал предложение jonsca использовать тип проекта «Консольное приложение». Я использую компилятор по умолчанию — GNU GCC compiler. Возможно, проблема в этом — есть несколько компиляторов на выбор. Как мне узнать, правильно ли они установлены? (Я предполагаю, что компилятор по умолчанию включен в установку code::blocks — я скачал программу всего несколько дней назад и выбрал тот, который поставляется с компилятором MingGW — но этого компилятора нет в списке. Я подозреваю, что моя проблема может заключаться здесь?

Ответ №5:

Убедитесь, что все файлы (.h и .cpp) были добавлены в проект с помощью Project>Add Files… или Project> Добавить файлы рекурсивно…

Комментарии:

1. Как бы то ни было, это решение Code::Blocks.

2. @theJollySin вау, я написал этот ответ, когда был новичком и все еще использовал Code ::Blocks вместо Makefile, как обычный человек.

Ответ №6:

У меня была та же проблема, вы переносите готовые программы в консольное приложение в соответствии с инструкциями, но затем вы все равно получаете сообщение об ошибке. Что сработало для меня: основные сценарии, совместно используемые программами, должны быть переписаны (выделите их пробелом и выберите из меню, которое появляется при вводе первых нескольких символов), это почти как если бы вручную указать и вызвать Code::block, обращая внимание на их общее родство. лол.