Как скомпилировать / выполнить код 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 в названии поста), что он суммирует, как компилировать сценарии 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 не находится в пути к вашей среде (или предпочитаете, чтобы он не был: переносимые версии / ограничения политики), то вы можете следовать этому.


  1. Установите mingw-get-setup.exe

  2. Выберите основные пакеты, убедитесь, что все они имеют одинаковую версию, в противном случае это приводит к появлению странных ошибок, например, отсутствующих stddef.h файлы, когда я компилирую / запускаю. Я выбрал эти из MinGW Installation Manager:

Компоненты MinGW Installation Manager C

  1. Создайте скрипт в Notepad++:
npp_save
VCD C:\MinGW\bin\
g++ "$(FULL_CURRENT_PATH)" -o 
"$(CURRENT_DIRECTORY)\$(NAME_PART).exe"
cmd /c "$(CURRENT_DIRECTORY)\$(NAME_PART).exe"
  1. Скомпилируйте и выполните программу в Notepad++: Выполнить код C++ в Notepad

  2. Вы можете добавить кнопку прямого запуска или ярлык 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.

Я написал себе рабочий код, который просит пользователя

  1. имя выходного файла
  2. каталог, куда он должен идти
  3. и дополнительные параметры компилятора, такие как -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 в свой сценарий. просто удалите их. Надеюсь, это будет полезно.

Другие вопросы по тегам