2017-01-21 3 views
0

Я использую Notepad ++ для написания моей SA: серверной системы MP, но у меня есть проблема с попыткой организовать мои папки: я хочу поместить свои скомпилированные файлы (.amx - like результирующий .exe для не-Pawn devs) в отдельной папке с именем bin с той же структурой вложенной папки, что и исходная папка (src).NppExec - Переместить файл в другую папку, относящуюся к структуре подпапки

Для уточнения, желаемая структура папок такова:

Root folder 
├── src 
│ ├── filterscripts 
│ │ ├── file1.pwn 
│ │ └── file2.pwn 
│ └── gamemodes 
│  └── gm_main.pwn 
├── bin 
│ ├── filterscripts 
│ │ ├── file1.amx 
│ │ └── file2.amx 
│ └── gamemodes 
│  └── gm_main.amx 

Что я хочу, когда я скомпилировать .pwn файл, полученный .amx должен перейти к эквивалентной исходной вложенной но в bin.

Мой текущий выполнить сценарий заключается в следующем:

NPP_SAVE 
cd $(CURRENT_DIRECTORY) 
"C:\Pawn\bin\samp\pawncc.exe" "$(FILE_NAME)" -; -(

ли возможно сделать это только с помощью NppExec?

+0

1. Вы не не нужно кд в '$ (CURRENT_DIRECTORY)'. Вы уже здесь. 2. Что такое CURRENT_DIRECTORY? Это src? Я полагаю, что это src \ filterscripts, и вам нужно как-то извлечь эту часть из CURRENT_DIRECTORY, чтобы вы могли использовать '.. \ .. \ bin \ MAGIC' с' MAGIC beeing, полученный из CURRENT_DIRECTORY. Правильно? –

+0

CURRENT_DIRECTORY Я думаю, что это каталог, в котором находится текущий открытый файл. По умолчанию указанная директория при запуске NppExec - это папка, где находится блокнот ++. Exe is in. – Vico

+0

И о втором вопросе: exacly. Мне просто нужно перевести 'src \ filterscripts' или' src \ gamemodes' в 'bin \ filterscripts' или' bin \ gamemodes'. – Vico

ответ

0

Вы можете использовать этот NppExec скрипт, чтобы получить необходимые пути и кормить их в какие-то аргументы компилятора:

NPP_SAVE 
echo Sourcefile   : $(FULL_CURRENT_PATH) 

// --------------------------------------------------------------------------------- 
// -- use string function to get ROOT and SRC path and then BIN path: 

// set <var> ~ strrfind <s> <t> - returns the LAST position of <t> in <s> 
set Pos_Root ~ strrfind $(FULL_CURRENT_PATH) \src\ 
// set <var> ~ <math expression> - calculates the math expression 
set Pos_Src ~ $(Pos_Root) + 4 
// echo $(Pos_Src), $(Pos_Root) 

// returns the substring 
set Dir_Root ~ substr 0 $(Pos_Root) $(FULL_CURRENT_PATH) 
set Dir_Src ~ substr 0 $(Pos_Src) $(FULL_CURRENT_PATH) 
echo Src-Directory  : $(Dir_Src) 
echo Project-Directory : $(Dir_Root) 

set Dir_Bin = $(Dir_Root)\bin 
echo Bin-Directory  : $(Dir_bin) 

// -- Now use the previously determined substring to get the BIN path and then 
// -- derive the Target path with src replace by bin 

// get the target dir: 
// set <var> ~ strreplace <s> <t0> <t1> - replaces all <t0> with <t1> 
set TARGET_PATH ~ strreplace $(CURRENT_DIRECTORY) $(Dir_Src) $(Dir_Bin) 
echo Target-Directory : $(TARGET_PATH) 

// ---------------------------------- 

// use compile with $(FULL_CURRENT_PATH) and $(TARGET_PATH) 
"C:\Pawn\bin\samp\pawncc.exe" $(FULL_CURRENT_PATH) whatever-output-option $(TARGET_PATH) 

Notes

  • документация NppExec объясняет все различные set возможности, проверить их
  • альтернативами динамического получения путей будет статическое определение путей:
    • место в «настройки PATH» в качестве статических путей к ROOT, BIN, SRC и т.д. внутри сценария NppExec
    • определяют пути как переменные окружения, которые вы получаете доступ из сценария NppExec
    • совершенно иной подход будет будет хранить несколько $(FULL_CURRENT_PATH) и сделать некоторые каталоги изменения между:
      1. компакт-диск .., чтобы перейти от Src подкаталог к ​​исходным текстам
      2. в ROOT,
      3. в бункер
      4. затем сделать строка замены
+0

У меня есть ошибка: 'root_folder \ bin \ gamemodes.p (0): фатальная ошибка 100: невозможно прочитать из файла:" root_folder \ bin \ gamemodes.p "' – Vico

+0

Кажется, что функция использовала последние две буквы расширения (должна быть .pwn) – Vico

+0

@Vico. Затем вам нужно выяснить, что происходит. Эхо все вары и узнать строку, которая выдает ошибку. Единственная строка, которая бы действительно прочитала somthing, - последняя строка с командой компилятора. И эта строка использует '$ (FULL_CURRENT_PATH)'. Поэтому я понятия не имею, какая строка дает вам эту ошибку. –

Смежные вопросы