Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/75: Рейтинг темы: голосов - 75, средняя оценка - 4.73
14 / 13 / 1
Регистрация: 18.12.2018
Сообщений: 422
1

Как создать отдельные файлы для компиляции в одном проекте в C++?

15.01.2020, 23:55. Показов 15032. Ответов 25
Метки c++ (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Недавно перешел с Python на C++. И при изучении заметил, чтобы создать файл, где нужно писать исходный код, то нужно сначала создать некий проект. А можно ли в одном проекте, создать несколько файлов с расширением .cpp для работы с разными, никак друг от друга независящими кодами или каждый раз нужно создавать новый проект для нового кода? Иначе компилятор у меня компилирует задачу с предыдущего файла. В Python все просто: создал файл с расширением .py, забил в командном окне название файла и запустил. Работаю в среде Visual Studio 2017, файлы создаю в папке Исходные файлы.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2020, 23:55
Ответы с готовыми решениями:

Как создать макрос, который сохраняет содержание столбцов А:А, С:С, О:О в отдельные ТХТ файлы?
Задачка: Есть столбцы с данными А:А, С:С, О:О. Надо чтобы в результате работы макроса в конкретной...

как создать сборку для старого проекта и использовать ее в другом проекте?
как создать сборку для старого проекта и использовать ее в другом проекте? Хочу использовать...

Имеет ли смысл вставлять internal для использования класса в одном проекте
Имеет ли смысл вставлять internal для использования класса в одном проекте? Т.е. я знаю, что нигде...

Как сделать несколько задач в одном проекте?
Можно ли оформить решение всех задач из лабораторной работы в одном проекте? Если да, то как?...

25
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
16.01.2020, 00:55 2
Цитата Сообщение от SalavatGood Посмотреть сообщение
А можно ли в одном проекте, создать несколько файлов с расширением .cpp для работы с разными, никак друг от друга независящими кодами
Проект - это то что будет компилироваться
1. Вы что, хотите 2 скомпилированных файла для двух разных кодов?
2. Или вы хотите чтобы бесполезный код тупо не участвовал в компиляции, тогда созревает вопрос, зачем он там нужен? (но это сделать можно)

Добавлено через 4 минуты
2 -
C++
1
2
3
#if 0 
/*ненужный код тут*/
#endif
0
14 / 13 / 1
Регистрация: 18.12.2018
Сообщений: 422
16.01.2020, 01:12  [ТС] 3
AndryS1, хочу чтобы в одном проекте, для каждого файла .cpp был свой компилятор. Помню на 1 курсе ещё, на Linux когда работали с c++, мы просто файл создавали с расширением cpp и как-то через консоль запускали, но проектов не создавали.
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
16.01.2020, 01:15 4
Цитата Сообщение от SalavatGood Посмотреть сообщение
Помню на 1 курсе ещё, на Linux когда работали с c++, мы просто файл создавали с расширением cpp и как-то через консоль запускали, но проектов не создавали.
Ну поздравляю, вы теперь можете понять в чём разница между компилятором (то что вы через консоль делали) и IDE
Для таких случаев как правило создают новые проекты, сомневаюсь что один проект может иметь несколько выводов
1
Заблокирован
16.01.2020, 01:41 5
Можно так, двойные двоеточие комментарий
Откроем блокнот, вставим текст:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@echo off
:: Изменить по-вкусу
@set VCVALL="C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
 
:: Имя программы на выход
set APP=AppTest
 
:: Имя файла
set MAIN=main
 
call %VCVALL%
 
:: если ресурсы присутствуют
rc /r /v %APP%.rc
 
cl.exe /EHsc /D _CONSOLE /D _MBCS %MAIN%.cpp /MT /link kernel32.lib ^
user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ^
%APP%.res /OUT:"%APP%.exe" /OPT:NOREF /MACHINE:X86
IF NOT %ERRORLEVEL%==0 goto ERROR
 
@echo.
@echo.
@echo.  Compile %APP%.exe
@echo.
pause
del *.obj
goto EXIT
:ERROR
@echo.  Failed compile
pause
:EXIT
exit
файл назвать как-нибудь с расширением "BAT" или "CMD"
0
14 / 13 / 1
Регистрация: 18.12.2018
Сообщений: 422
16.01.2020, 12:32  [ТС] 6
AndryS1, значит создавая проект в visual studio, мы формируем для него отдельный компилятор? Насколько я понял, в c++ мы сразу пишем функцию (например int main()), и вызываем её, тогда можно создать будет создать в одном проекте несколько файлов, в котором содержатся разные имена функций, и просто через компилятор вызвать ту функцию, которая тебе нужна? Просто мне кажется нецелесообразно для маленьких программ с простой задачей, каждый раз под них создавать проект...

Добавлено через 3 минуты
Денди, это на каком языке и в какую папку помещать?
0
145 / 89 / 23
Регистрация: 31.08.2016
Сообщений: 780
Записей в блоге: 2
16.01.2020, 14:20 7
Цитата Сообщение от SalavatGood Посмотреть сообщение
и как-то через консоль запускали, но проектов не создавали.
посмотри здесь
1
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
16.01.2020, 14:55 8
Цитата Сообщение от SalavatGood Посмотреть сообщение
значит создавая проект в visual studio, мы формируем для него отдельный компилятор
компилятор - 1
а вот вывод разный,
1 проект - 1 бинарный файл (exe, dll)

Цитата Сообщение от SalavatGood Посмотреть сообщение
асколько я понял, в c++ мы сразу пишем функцию (например int main()), и вызываем её, тогда можно создать будет создать в одном проекте несколько файлов, в котором содержатся разные имена функций, и просто через компилятор вызвать ту функцию, которая тебе нужна?
int main() - точка входа в твою программу, если ты её не определишь, компилятор выдаст ошибку "ссылка на неразрешённый внешний символ"
В одном проекте не будет несколько разных бинарников!

Добавлено через 32 секунды
Цитата Сообщение от SalavatGood Посмотреть сообщение
это на каком языке и в какую папку помещать?
Это сценарии винды
(batch)
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
16.01.2020, 15:23 9
Цитата Сообщение от SalavatGood Посмотреть сообщение
нецелесообразно для маленьких программ с простой задачей, каждый раз под них создавать проект...
Один Solution(решение) может в себе содержать кучу проектов, это нормально и удобно, и все в одном окне IDE
0
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
16.01.2020, 15:24 10
Цитата Сообщение от Raali Посмотреть сообщение
Один Solution(решение) может в себе содержать кучу проектов, это нормально и обычно и удобно
ТС не удобно)
0
Заблокирован
16.01.2020, 15:51 11
Цитата Сообщение от SalavatGood Посмотреть сообщение
это на каком языке и в какую папку помещать
Видите в левом углу "Windows Batch file" - это файл с расширением "BAT".
На сленге "батник". Класть файл-bat нужно в каталог с модулем *.C или *.CPP файла,
для удобства, назвать именем аналогичном модуля-cpp.
0
14 / 13 / 1
Регистрация: 18.12.2018
Сообщений: 422
17.01.2020, 11:11  [ТС] 12
И такой еще момент, проект который содержит только эту функцию (но и плюс свои комментарии конечно примерно под 30 строк, хотя сомневаюсь что они как то значительно влияют на память):
C++
1
2
3
4
5
6
void main()
{
    setlocale(LC_ALL, "Rus"); //функция вывода русских символов в консоль
    cout << "HelloWorld!" << endl; //вывод данных в консоль, endl - перевод курсора текста на след строчку
    cout << "Привет!";
}
Весит 94,4 Мб, хотя изначально создавал пустой проект, это при компиляции такого размера бинарный файл создается или что, и можно ли каким-то образом создать проект, чтобы не весил так много?
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
21.01.2020, 11:49 13
Цитата Сообщение от SalavatGood Посмотреть сообщение
Весит 94,4 Мб
Дак посмотри что много весит, и в какой папке, скорее всего это информация для intelliscence
0
14 / 13 / 1
Регистрация: 18.12.2018
Сообщений: 422
21.01.2020, 13:51  [ТС] 14
Raali, просто в проекте в папке .vs удаляю папку ipch и все. Она создается при компиляции. А можно как-то в самом visual studio удалять результаты компиляции, а то не совсем удобно каждый раз папку удалять?
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
24.01.2020, 10:20 15
Цитата Сообщение от SalavatGood Посмотреть сообщение
просто в проекте в папке .vs удаляю папку ipch и все. Она создается при компиляции. А можно как-то в самом visual studio удалять результаты компиляции, а то не совсем удобно каждый раз папку удалять?
Вот именно что это информация для intellisence, чтобы автозаполнение работало итд а не результаты компиляции
Просто понимаешь, у тебя когда ты вписываешь хедер, он за собой тянет еще кучу хедеров, а те еще кучу, без этого кеша у тебя бы автозаполнение начинало работать не сразу а после длительного времени
1
14 / 13 / 1
Регистрация: 18.12.2018
Сообщений: 422
28.01.2020, 17:37  [ТС] 16
Raali,
Цитата Сообщение от Raali Посмотреть сообщение
Просто понимаешь, у тебя когда ты вписываешь хедер, он за собой тянет еще кучу хедеров, а те еще кучу, без этого кеша у тебя бы автозаполнение начинало работать не сразу а после длительного времени
А можно какие-то команды в коде прописать, чтобы кэш после выполнения компиляции удалялся?
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
28.01.2020, 19:06 17
Цитата Сообщение от SalavatGood Посмотреть сообщение
А можно ли в одном проекте, создать несколько файлов с расширением .cpp для работы с разными, никак друг от друга независящими кодами или каждый раз нужно создавать новый проект для нового кода? Иначе компилятор у меня компилирует задачу с предыдущего файла.
Файлы в проекте, это примерно тоже самое что модули в Питоне. Они не рассчитаны на запуск отдельно от какой либо программы.
Цитата Сообщение от SalavatGood Посмотреть сообщение
Весит 94,4 Мб, хотя изначально создавал пустой проект, это при компиляции такого размера бинарный файл создается или что, и можно ли каким-то образом создать проект, чтобы не весил так много?
IDE менять? Сейчас попробовал создать подобный проект в QtCreator, около сотни килобайт на все про все ушло. По крайней мере под пингвинами. Но расходы IDE едва ли зависят от операционки.

Впрочем, exe-шник под Виндой все равно будет выходить большим, если без зависимостей от dll и плясок с бубном. Не сто мегабайт конечно, но к ста килобайтам нужно быть готовым. Разработчикам компиляторов вечно лень распилить реализацию стандартных библиотек на малые порции и они норовят всю STL к Hello World прицепить.
0
369 / 312 / 65
Регистрация: 14.10.2014
Сообщений: 1,319
28.01.2020, 21:21 18
SalavatGood, Есть такая среда разработки DevC++ называется, она отлично компилирует отдельные файлы, проект создавать необязательно. Создаёте исходный файл .cpp, пишете в нем всё, что вам надо, компилируете - PROFIT
0
14 / 13 / 1
Регистрация: 18.12.2018
Сообщений: 422
30.01.2020, 11:50  [ТС] 19
Цитата Сообщение от Renji Посмотреть сообщение
Файлы в проекте, это примерно тоже самое что модули в Питоне.
В Питон в консоле достаточно прописать в консоли pip install <имя_модуля> и модуль установлен, а в C++ получется просто файл с библиотекой в какую-то папку проекта закинуть надо или как?

Добавлено через 58 секунд
Recrut_rf, Dev C++ позволяет работать с многопоточностью?
0
369 / 312 / 65
Регистрация: 14.10.2014
Сообщений: 1,319
30.01.2020, 14:22 20
Цитата Сообщение от SalavatGood Посмотреть сообщение
Dev C++ позволяет работать с многопоточностью
Вот этот пример (да и все из справочника по STL) без проблем отрабатывают:
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <future>
#include <thread>
#include <chrono>
#include <random>
#include <iostream>
#include <exception>
using namespace std;
 
int doSomething (char c)
{
    // random-number generator (use c as seed to get different sequences)
    std::default_random_engine dre(c);
    std::uniform_int_distribution<int> id(10,1000);
 
    // loop to print character after a random period of time
    for (int i=0; i<10; ++i) {
        this_thread::sleep_for(chrono::milliseconds(id(dre)));
        cout.put(c).flush();
    }
 
    return c;
}
 
int func1 ()
{
    return doSomething('.');
}
 
int func2 ()
{
    return doSomething('+');
}
 
int main()
{
    std::cout << "starting func1() in background"
              << " and func2() in foreground:" << std::endl;
 
    // start func1() asynchronously (now or later or never):
    std::future<int> result1(std::async(func1));
 
    int result2 = func2();    // call func2() synchronously (here and now)
 
    // print result (wait for func1() to finish and add its result to result2
    int result = result1.get() + result2;
 
    std::cout << "\nresult of func1()+func2(): " << result
              << std::endl;
}


Добавлено через 10 минут
Цитата Сообщение от SalavatGood Посмотреть сообщение
или как
Или прописать зависимости в самой среде разработки - в настройках проекта (пути до включаемых файлов - .h, .cpp, .lib ) или в ручную в самом коде прописать - #include "путь до файла и название" - так же и с библиотеками (#pragama_lib - этой директивой по-моему подключают библиотеку). Лично я в ручную никогда не прописывал (h - файлы подключал, библиотеки -нет) так что не могу сказать как точно это делать. Всегда настраивал нужные зависимости в настройках проекта среды разработки.
1
30.01.2020, 14:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2020, 14:22
Помогаю со студенческими работами здесь

Как объединить в одном проекте несколько форм?
Мне необходимо увязать 3 формы между собой. У меня есть в проекте одна форма - она главная и...

Как в проекте purebasic создать память, доступную для других внешних процессов?
как в проекте purebasic создать общедоступную память , доступный для других внешних процессов?

Как в одном проекте сделать два пространства имен?
сделал так. но выводит только то что в namespace Laba, a arifm не выводит в консоль using...

Как использовать два winsock контрола в одном проекте
Не получается работать с двумя winsock контролами, второй не подключается.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru