Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Nweo
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 17
#1

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

13.11.2012, 08:38. Просмотров 680. Ответов 14
Метки нет (Все метки)

Всем привет!
Компилятор GCC.
Из Readme:
=== TDM-GCC Compiler Suite for Windows ===
--- GCC 4.4/4.5 Series ---
*** Standard MinGW 32-bit Edition ***
Проблема вот в чем.
Создал батник, для экономии действий, следующего содержания:
C
1
2
g++ *.cpp
PAUSE
Кидаю в нужную папку и жму. Только вот на выходе получается a.exe. Как сделать так ,чтобы имя выходного файла было то же, что и у исходного файла?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2012, 08:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как заставить компилятор выводить имя файла? (C++):

Как заставить компилятор не компилить неправильную программу? - C++
Мне не даёт покоя разговор с одним программистом, имевший место быть несколько лет назад. Тот сказал, что он так кодит, что у него...

Как заставить компилятор давать имена символам, соответствующие названиям функций? - C++
Здравствуйте! Пишу динамическую библиотеку, в которой имплементирую функцию run() - эта функция должна вызываться потом сторонним...

Можно ли из конструктора выводить имя создаваемого в нем обьекта? - C++
Например, в такой программе. #include <string> #include <iostream> // для объекта cout using namespace std; #include<iomanip> ...

Как узнать имя файла? - C++
Имеется что-то вроде такого кода pHttpCon = session.GetHttpConnection(szServerName); fr=pHttpCon->OpenRequest('GET',szPath); ...

Указатель на имя файла как аргумент функции. Как реализовать? - C++
Доброго времени суток всем! Прошу помощи! Написал программу, есть пару моментов, сложных для меня. Необходимо написать две функции, одну...

Имя файла как параметр функции - C++
Необходимо заполнить массив из файла, для этого нужно создать отдельную функцию параметром которой будет являться имя файла. Хотелось бы...

14
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.11.2012, 09:19 #2
g++ -o <имя exe-файла> *.cpp

И посмотрите в сторону мейкфайлов.
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
13.11.2012, 09:24 #3
Можно задать имя в ручную: g++ *.cpp -o test.exe
0
Nweo
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 17
13.11.2012, 10:49  [ТС] #4
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
g++ -o <имя exe-файла> *.cpp

И посмотрите в сторону мейкфайлов.
<имя exe-файла> писать вручную? Так хотелось бы автоматизировать этот процесс, написав что-то вроде <file-name>.exe
Посмотрел о мейкфайлов. У меня виндовс. А мейкфайлы, как я понял, для линукса.

lazybiz, так чтобы не набирать вручную, и пытаюсь узнать, как заставить компилятор вставлять имя ехе-файла самостоятельно, вроде бы это нетрудно - береш имя .срр-файла и вставляешь перед .ехе, вот только вопрос, как это сказать компилятору?
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
13.11.2012, 11:04 #5
Nweo, в данном случае никак.
В Windows тоже можно использовать Makefile, главное чтобы была установлена утилита GNU make.

В MinGW я делаю через Makefile так:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
APP = main
CFL = -c -Wall -O2 -std=gnu++0x
LFL = -s -static
SRC = $(APP).cpp file1.cpp file2.cpp
OBJ = $(SRC:.cpp=.o)
LIB = -lgdi32
 
all: $(OBJ)
    g++ $(LFL) -o $(APP).exe $(OBJ) $(LIB)
 
%.o: %.cpp
    g++ $(CFL) $*.cpp -o $@
 
clean:
    @del $(OBJ) > NUL 2>&1
    @del $(APP).exe > NUL 2>&1
1
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
13.11.2012, 14:44 #6
Цитата Сообщение от Nweo Посмотреть сообщение
g++ *.cpp
если в папке один файл *cpp, можно создать экзешник, который бы эту строку
C++
1
g++ *.cpp
преобразовывал в
C++
1
g++ -o <имя какое надо>*.cpp
а потом запускал
C++
1
g++ -o <имя какое надо>*.cpp
0
Kastaneda
13.11.2012, 15:30
  #7

Не по теме:

Мы сами создаем себе трудности и преодолеваем их!

1
Nweo
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 17
13.11.2012, 17:18  [ТС] #8
kravam, можно поподробнее, как создать экзешник, что написать в <имя какое надо>, чтобы не нужно было ручками туда вписывать имя файла?
Kastaneda,

Не по теме:

а вообще поставил CodeBlocks, чтобы можно было быстрее скомпилировать 3 и более файла. Только вот не могу отключить автозаполнение, не подскажете, как эксперт в С++, как это сделать? Хочу научиться без подсказок! В настройках едитора не нашел. Если б можно было, вопрос в теме отпал бы сам собою.

0
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
13.11.2012, 18:06 #9
Nweo, ставить надо Dev-Cpp, ничё лишнего, как говорится. Плюс компилятор gcc, разве плохо? Со временем обновляешь компилятор, смотришь мне в подпись и так далее.

++++++++++++++++++++++++++++++++++++++++++++++++++++++

Вот такой экзешник можно. Предполагается, что в папке один файл *.main.cpp с ЛЮБЫМ именем
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <stdio.h>
#include <string.h>
#include <windows.h>
 
 
int f (char*, char*);
int main(){
 
 //НАйдём имя файлф *.cpp
 char ima_faila [256];
 f ((char*)".\\*.cpp", ima_faila);
 ima_faila [strlen (ima_faila)- 4]= 0;
 
 //Теперь лепим итоговую строку
 char itog [256]= "g++ -o ";
 strcat (itog, ima_faila);
 strcat (itog, ".exe ");
 strcat (itog, ima_faila);
 strcat (itog, ".cpp");
 
 printf (itog);
 printf ("\n");
 
 //Теперь создаём батник с этой строкой
 FILE* f;
 if (!(f= fopen("kompil.bat", "wb"))) {
  printf ("батник не открыт на запись\n");
  getchar ();
  return 0; 
 }
 
 //Теперь наполним его этим строкой
 if (fputs (itog, f)==EOF) {
  printf ("ни хрена в батник не записалось\n");
  getchar ();
  return 0; 
 }
 //Сперва надо закрыть, а потом запустить батник
 fclose (f);
 
 //А теперь запускаем этот батник
 system ("kompil.bat");
 
 
 //Теперьвсё, удаляем батник 
 system ("DEL kompil.bat");
 return 0;
}
 
//Функция для поиска единственного файла *.cpp
int f (char* ima_direktorii_i_rashirenie, char* rez){
        WIN32_FIND_DATA FindFileData;
        HANDLE hf;
        hf = FindFirstFile(ima_direktorii_i_rashirenie,&FindFileData);
        if(hf != INVALID_HANDLE_VALUE){
                do{
                  strcpy (rez, FindFileData.cFileName);                      
                  return 0;
                }
                while(FindNextFile(hf,&FindFileData) != 0);
                FindClose(hf);
        }
        printf ("всё плохо, может, файла *.cpp нет, может, ещё что\n");
        return 0;
}
0
Kastaneda
Форумчанин
Эксперт С++
4655 / 2863 / 228
Регистрация: 12.12.2009
Сообщений: 7,276
Записей в блоге: 2
Завершенные тесты: 1
13.11.2012, 19:06 #10
Цитата Сообщение от Nweo Посмотреть сообщение
а вообще поставил CodeBlocks, чтобы можно было быстрее скомпилировать 3 и более файла. Только вот не могу отключить автозаполнение, не подскажете, как эксперт в С++, как это сделать?
Я давно уже в codeBlocks не работал, даже не помню как там что настраивается. И про автозаполение вопроса не понял.
Вообще делать ради этого экзешник это перебор. Такие вещи решаются батником. Если очень охото юзерфрендлости, вот накидал на коленке (проверить не могу, сижу под линуксом, но вроде синтаксис не попутал )
Bash
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
@echo off
chcp 886
cls
 
set file=a.exe
set files=*.cpp
 
:MENU
echo. 
echo Choose your option and press "Enter"
echo. 
echo 1. Set .exe name (a.exe by default)
echo 2. Enter a file names to compilation (all by default)
echo 3. Compilation
echo 4. Exit
 
set /p option=
if %option% == 1 goto :GET_NAME
if %option% == 2 goto :GET_FILE_NAMES
if %option% == 3 goto :COMPILATION
if %option% == 4 goto :EXIT
 
:GET_NAME
echo Output file name:
set /p file_name=
set file=%file_name%
goto :MENU
 
:GET_FILE_NAMES
echo Enter file names:
set /p file_names=
set files=%file_names%
goto :MENU
 
:COMPILATION
g++ -o %file% %files%
 
:EXIT
pause
0
OhMyGodSoLong
13.11.2012, 19:09
  #11

Не по теме:

2 kravam
> Мы сами создаем себе трудности и преодолеваем их!
this

Сколько мучений вместо того, чтобы один раз в одну строку одного конфига объяснить тупой машине, как называть экзешник.

А если основной файл надо будет называть не myapp.main.cpp? А если файл с функцией main() надо будет называть именно main.cpp и никак иначе, а экзешник именно myapp? Вот такие автогенерируемые батники тут не помогут.

0
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
13.11.2012, 19:53 #12
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Сколько мучений
"Что ж, может, работа, а может, и не работа. Я знаю только одно, что Тому Сойеру она по душе."
Марк Твен, "Приключения Тома Сойера"

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

одного конфига
какого на фиг конфига?

А если основной файл надо будет называть не myapp.main.cpp?
а это по фиг, имя экзешника будет как ТС просил, лишь бы он был один и расширение было *.cpp

Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
А если файл с функцией main() надо будет называть именно main.cpp и никак иначе, а экзешник именно myapp? Вот такие автогенерируемые батники тут не помогут.
мой экзешник делает только то, что делает и не более.
0
Nweo
0 / 0 / 0
Регистрация: 10.10.2012
Сообщений: 17
13.11.2012, 22:03  [ТС] #13
Цитата Сообщение от lazybiz Посмотреть сообщение
Можно задать имя в ручную: g++ *.cpp -o test.exe
Кстати, недавно выяснил, что .exe писать необязательно, компилятор сам сделает exe

Добавлено через 2 минуты
Цитата Сообщение от lazybiz Посмотреть сообщение
Nweo, в данном случае никак.
В Windows тоже можно использовать Makefile, главное чтобы была установлена утилита GNU make.

В MinGW я делаю через Makefile так:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
APP = main
CFL = -c -Wall -O2 -std=gnu++0x
LFL = -s -static
SRC = $(APP).cpp file1.cpp file2.cpp
OBJ = $(SRC:.cpp=.o)
LIB = -lgdi32
 
all: $(OBJ)
    g++ $(LFL) -o $(APP).exe $(OBJ) $(LIB)
 
%.o: %.cpp
    g++ $(CFL) $*.cpp -o $@
 
clean:
    @del $(OBJ) > NUL 2>&1
    @del $(APP).exe > NUL 2>&1
Сделал из Вашего кода батник, cmd поморгал, (разобрал слова "не является рисунком...) да и исчез. А exe-шки не появилось.
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
13.11.2012, 22:42 #14
Цитата Сообщение от Nweo Посмотреть сообщение
Сделал из Вашего кода батник, cmd поморгал, (разобрал слова "не является рисунком...) да и исчез. А exe-шки не появилось.
Странно... почему же это cmd не схавал мой Makefile... хм.., загадка!!

Добавлено через 1 минуту
А. Точно! Может потому что это Makefile а не батник!??
1
Croessmah
13.11.2012, 22:46     Как заставить компилятор выводить имя файла?
  #15

Не по теме:

Цитата Сообщение от lazybiz Посмотреть сообщение
А. Точно! Может потому что это Makefile а не батник!??
зачет

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2012, 22:46
Привет! Вот еще темы с ответами:

Как из файла фонта извлечь его имя - C++
Есть TTF-файл. Как средствами Си, Си++, WinApi узнать его имя (семейство)? типа &quot;Courier New Bold&quot; Добавлено через 2 минуты И...

Возможно ли использовать имя файла как аргумент main()? - C++
Хочу добиться разного поведения при разных именах exe'шника. Это возможно, не используя батник и стандартный ввод аргументов?

Как получить имя файла при перетаскивании на программу? - C++
Ну т.е. у меня консольное приложение, и нужно работать с файлом.

Можно ли представить значение переменной как имя файла? - C++
К примеру переменной х присваиваем случайное значение от 1 до 10, и в зависимости от того, чему равен х, результат записываем в файл с...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.11.2012, 22:46
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru