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

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

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

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

13.11.2012, 08:38. Просмотров 635. Ответов 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. Как сделать так ,чтобы имя выходного файла было то же, что и у исходного файла?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2012, 08:38     Как заставить компилятор выводить имя файла?
Посмотрите здесь:

C++ Как узнать имя файла?
C++ Как заставить компилятор не компилить неправильную программу?
Можно ли из конструктора выводить имя создаваемого в нем обьекта? C++
C++ Указатель на имя файла как аргумент функции. Как реализовать?
C++ Как заставить компилятор давать имена символам, соответствующие названиям функций?
Как из файла фонта извлечь его имя C++
Можно ли представить значение переменной как имя файла? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
13.11.2012, 09:19     Как заставить компилятор выводить имя файла? #2
g++ -o <имя exe-файла> *.cpp

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

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

lazybiz, так чтобы не набирать вручную, и пытаюсь узнать, как заставить компилятор вставлять имя ехе-файла самостоятельно, вроде бы это нетрудно - береш имя .срр-файла и вставляешь перед .ехе, вот только вопрос, как это сказать компилятору?
castaway
Эксперт С++
4873 / 3012 / 370
Регистрация: 10.11.2010
Сообщений: 11,061
Записей в блоге: 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
kravam
быдлокодер
1695 / 874 / 44
Регистрация: 04.06.2008
Сообщений: 5,340
13.11.2012, 14:44     Как заставить компилятор выводить имя файла? #6
Цитата Сообщение от Nweo Посмотреть сообщение
g++ *.cpp
если в папке один файл *cpp, можно создать экзешник, который бы эту строку
C++
1
g++ *.cpp
преобразовывал в
C++
1
g++ -o <имя какое надо>*.cpp
а потом запускал
C++
1
g++ -o <имя какое надо>*.cpp
Kastaneda
13.11.2012, 15:30
  #7

Не по теме:

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

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

Не по теме:

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

kravam
быдлокодер
1695 / 874 / 44
Регистрация: 04.06.2008
Сообщений: 5,340
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;
}
Kastaneda
Форумчанин
Эксперт С++
4259 / 2791 / 219
Регистрация: 12.12.2009
Сообщений: 7,120
Записей в блоге: 1
Завершенные тесты: 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
OhMyGodSoLong
13.11.2012, 19:09
  #11

Не по теме:

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

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

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

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

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

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

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

Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
А если файл с функцией main() надо будет называть именно main.cpp и никак иначе, а экзешник именно myapp? Вот такие автогенерируемые батники тут не помогут.
мой экзешник делает только то, что делает и не более.
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-шки не появилось.
castaway
Эксперт С++
4873 / 3012 / 370
Регистрация: 10.11.2010
Сообщений: 11,061
Записей в блоге: 10
Завершенные тесты: 1
13.11.2012, 22:42     Как заставить компилятор выводить имя файла? #14
Цитата Сообщение от Nweo Посмотреть сообщение
Сделал из Вашего кода батник, cmd поморгал, (разобрал слова "не является рисунком...) да и исчез. А exe-шки не появилось.
Странно... почему же это cmd не схавал мой Makefile... хм.., загадка!!

Добавлено через 1 минуту
А. Точно! Может потому что это Makefile а не батник!??
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2012, 22:46     Как заставить компилятор выводить имя файла?
Еще ссылки по теме:

Как открыть файл, если имя файла является переменной C++
Как получить имя файла при перетаскивании на программу? C++
Как указать имя файла в fstream через string и функцию? C++
C++ Возможно ли использовать имя файла как аргумент main()?
Как получить имя файла для дальнейшей работы с этим файлом? C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
13.11.2012, 22:46     Как заставить компилятор выводить имя файла?
  #15

Не по теме:

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

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

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