Как скомпилировать / выполнить код C++ из Notepad++
Я читал http://daleswanson.blogspot.com/2012/07/how-to-compile-c-code-in-notepad-with.html и решил попробовать это, чтобы я мог продолжать писать код в Notepad++ и иметь более короткий цикл компиляции / запуска.
Когда я пытался ввести код компиляции / запуска в NppExec, он не работал. Код, который я сейчас имею:
npp_save
cd "$(C:\Users\Bart\Desktop\new delete me)"
g++ "$(test.cpp)" -o $(testme.exe) -march=native -O3
NPP_RUN $(testme.exe)
Это было основано на первой ссылке, которую я дал:
npp_save
cd "$(CURRENT_DIRECTORY)"
g++ "$(FILE_NAME)" -o $(NAME_PART) -march=native -O3
NPP_RUN $(NAME_PART)
Блокнот ++ дает мне следующую информацию в консоли:
NPP_SAVE: C:\Users\Bart\Desktop\new delete me\test.cpp
CD:
Current directory: C:\Program Files (x86)\Notepad++
g++ "" -o -march=native -O3
CreateProcess() failed with error code 2:
The system cannot find the file specified.
NPP_RUN:
- empty command
С других страниц мне казалось, что мне просто нужно вставить этот код, что все заглавные слова не предназначены для замены, а являются переменными. Поэтому я использовал этот код:
npp_save
cd "$(CURRENT_DIRECTORY)"
g++ "$(FILE_NAME)" -o $(NAME_PART) -march=native -O3
NPP_RUN $(NAME_PART)
Что дало в консоли Notepad++ следующее:
NPP_SAVE: C:\Users\Bart\Desktop\new delete me\test.cpp
CD: C:\Users\Bart\Desktop\new delete me
Current directory: C:\Users\Bart\Desktop\new delete me
g++ "test.cpp" -o test -march=native -O3
CreateProcess() failed with error code 2:
The system cannot find the file specified.
NPP_RUN: test
- the specified file was not found
Вот что я сделал, чтобы настроить вещи:
Я скачал mingw-get-setup.exe с http://sourceforge.net/projects/mingw/files/ который установил Менеджер установки MinGW. Затем я использовал его для установки пакета mingw32-gcc-++, а также пакетов mingw32-libz.dll и mingw32-libz.dev
В Notepad++ я использовал Менеджер плагинов для установки плагина NppExec.
Я могу запустить мой код, сначала скомпилировав его вручную в командном окне. Notepad++ жалуется на отсутствие библиотеки, поэтому при компиляции я использую следующие флаги: g++ test.cpp -static-libgcc -static-libstdC++
Если я нажимаю F5 в Notepad++ (или нажимаю "Выполнить" в меню "Выполнить"), я могу выбрать файл a.exe, созданный из моей компиляции командной строки, и он откроет окно командной строки и запустит этот код, так что все работает нормально.
Но кажется, что моя команда изменения каталога по какой-то причине не работает в NppExec, когда я пытаюсь автоматизировать компиляцию / запуск.
Вот некоторые другие сообщения, описывающие стек-потоки, которые, как я обнаружил, посвящены аналогичным проблемам, но которые мне не подходят. У меня нет очков, поэтому я не могу ответить ни на один из них:
- Как скомпилировать и запустить файлы C из Notepad++ с помощью плагина NppExec?
- Окончательная настройка gcc в Notepad++ [с использованием nppexec]
- Сбой Notepad++, NppExec, CreateProcess() с кодом ошибки 2, Windows 8.1
Что ж, похоже, что в первом посте, на который я ссылался, есть частичное решение - похоже (несмотря на упоминание файлов c в названии поста), что он суммирует, как компилировать сценарии perl. Он сказал поставить следующее в окне NppExec:
NPP_SAVE
CD $(CURRENT_DIRECTORY)
C:\MinGW32\bin\gcc.exe -g "$(FILE_NAME)"
a.exe
На последней строчке было только "а", но это то же самое, что и "a.exe", и таким образом он более читабелен. При этом, это не полное решение. Это просто запускает файл во внутренней консоли Notepad++, в нижней части экрана, и я бы хотел, чтобы он открывал окно, как это было бы, если бы я использовал F5 Notepad++ для запуска моей скомпилированной программы из ее директой.
5 ответов
У меня есть рабочий код (который я немного отредактировал) отсюда:
http://windowsbro.blogspot.hu/2012/10/compile-with-notepad-any-language.html
npp_save
g++ "$(FULL_CURRENT_PATH)" -o "$(CURRENT_DIRECTORY)\$(NAME_PART).exe"
npp_run $(CURRENT_DIRECTORY)\$(NAME_PART).exe
В этой форме он компилирует двоичный файл рядом с исходным файлом. Если вы измените последнюю строку на это:
cmd /c "$(CURRENT_DIRECTORY)\$(NAME_PART).exe"
затем программа запускается в консоли NppExec с запуском cmd.exe
,
Как большой поклонник Notepad++ и новичок в C++, мне потребовалось немного времени, чтобы понять и следовать инструкциям.
Здесь не хватает одной части, и если вы похожи на меня, начинайте с нуля и не имея представления о компиляторе MinGW. Вы можете установить это первым.
Если компилятор MinGW не находится в пути к вашей среде (или предпочитаете, чтобы он не был: переносимые версии / ограничения политики), то вы можете следовать этому.
Установите mingw-get-setup.exe
Выберите основные пакеты, убедитесь, что все они имеют одинаковую версию, в противном случае это приводит к появлению странных ошибок, например, отсутствующих
stddef.h
файлы, когда я компилирую / запускаю. Я выбрал эти из MinGW Installation Manager:
- Создайте скрипт в Notepad++:
npp_save
VCD C:\MinGW\bin\
g++ "$(FULL_CURRENT_PATH)" -o
"$(CURRENT_DIRECTORY)\$(NAME_PART).exe"
cmd /c "$(CURRENT_DIRECTORY)\$(NAME_PART).exe"
Вы можете добавить кнопку прямого запуска или ярлык F5 из nppexec > Дополнительные параметры. Кнопка "Выполнить" - это крошечная кнопка в конце панели инструментов:
Кроме того, вы можете добавить MinGW в путь к вашей среде, если вы хотите запустить скомпилированную программу из любого места, хорошее объяснение можно найти на их веб-сайте. Таким образом, вы можете пропустить указание в каталоге MinGW:
cd C:\MinGW\bin\
cd $(CURRENT_DIRECTORY)
"<Каталог g++>\GCC\bin\g++.exe" "$(FILE_NAME)" -o "$(NAME_PART)"
cmd /c "$(NAME_PART).exe"
Используйте эту команду
Что касается вашего последнего вопроса, как запустить a.exe в отдельном окне, а не в консоли notepad++: попробуйте заменить последнюю строку a.exe на что-то вроде:
NPP_RUN cmd /k a
npp_run - это команда npp_exec, здесь она запускает команду "cmd /k a", cmd /k выполняет команду после "/k" и сохраняет окно открытым после завершения a.exe.
Я написал себе рабочий код, который просит пользователя
- имя выходного файла
- каталог, куда он должен идти
- и дополнительные параметры компилятора, такие как -m32 или что-нибудь еще
Я также позаботился о пустых каталогах и именах, чтобы НЕ ДОЛЖНЫ возникать ошибки. Я с нетерпением жду возможности улучшить это, но пока это работает.
//save file
npp_saveall
//specify directory
//if blank set to src dir
inputbox "Specify Directory" : " save_directory" : $(CURRENT_DIRECTORY)
set DIR = $(INPUT)
if "$(INPUT)" == " " then
set DIR = $(CURRENT_DIRECTORY)
endif
if "$(INPUT)" == "" then
set DIR = $(CURRENT_DIRECTORY)
endif
//specify file name
//if blank set to a.exe
inputbox "Choose executable name" : " file_name" : a.exe
set NAME = $(INPUT)
if "$(INPUT)" == " " then
set NAME = a.exe
endif
if "$(INPUT)" == "" then
set NAME = a.exe
endif
//add compiling options
inputbox "Additional compiling options" : " add_options" : -m32 -I"C:\SDL2-2.0.12\i686-w64-mingw32 (x32)\include\SDL2" -L"C:\SDL2-2.0.12\i686-w64-mingw32 (x32)\lib"
set OPTIONS = $(INPUT)
//launch g++ compiler
g++.exe "$(FULL_CURRENT_PATH)" -o"$(DIR)\$(NAME)" $(OPTIONS)
//run compiled prgram
if $(EXITCODE) == 0 then
messagebox "Compilation successfull. Saved in '$(DIR)'. Running $(NAME)" : "MinGW g++ Compiler"
npp_run "$(DIR)\$(NAME)"
else
messagebox "Compilation not successfull."
Обратите внимание, что я добавляю файлы SDL в свой сценарий. просто удалите их. Надеюсь, это будет полезно.