Мой скрипт PowerShell не работает должным образом (для компиляции файлов C ++) - PullRequest
0 голосов
/ 25 мая 2018

Я программист на C ++.Я хотел автоматизировать задачу компиляции, запуска и отладки программы в один аккуратный скрипт PowerShell.Но он неожиданно выдает несвязанную ошибку, которую я не знаю почему.

Программа принимает на вход файл (ы) C ++, создает скомпилированный файл .exe и запускает программу одновременно.Также требуются другие небольшие параметры отладки.

if (!($args.count -ge 1)) {
    Write-Host "Missing arguments: Provide the filename to compile"
    exit
}

$isRun = 1

$EXE_NM = [IO.Path]::GetFileNameWithoutExtension($args[0])
$GPP_ARGS = "-o " + $EXE_NM + ".exe"

$count = 0

foreach ($op in $args) {
    if ($op -eq "-help" -or $op -eq "-?") {
        Write-Host "Format of the command is as follows:-"
        Write-Host "cpr [filename.cpp] {additional files}"
        Write-Host "{-add [compiler options] (all options of -add should be in double quotes altogether)}"
        Write-Host "[-d (short for -add -g)] [-nr (do not run automatically)]"
        exit
    } elseif ($op.Contains(".cxx") -or $op.Contains(".cpp")) {
        $op = """$op"""
        $GPP_ARGS += " " + $op
    } elseif ($op -eq "-add") {
        if (($count+1) -ne $args.Count) {
            $GPP_ARGS += " " + $args[$count+1]
        }
    } elseif ($op -eq "-d") {
        $GPP_ARGS += " -g"
    } elseif ($op -eq "-nr") {
        $isRun = 0
    }

    $count += 1
}

$err = & g++.exe $GPP_ARGS 2>&1

if ($LastExitCode -eq 0) {
    if ($isRun -eq 1) {
        if ($isDebug -eq 1) {
            gdb.exe $EXE_NM
        } else {
            iex $EXE_NM
        }
    }
    if ($err.length -ne 0) {
        Write-Host $err -ForegroundColor "Yellow"
    }
} else {
    Write-Host "$err" -ForegroundColor "Red"
}

Например: при попытке выполнить cpr.ps1 HCF.cpp выдается следующая ошибка:

g ++. Exe: фатальная ошибка:компиляция входных файлов не прекращена.

Я убедился, что файл .cpp существует в текущем рабочем каталоге.

1 Ответ

0 голосов
/ 27 мая 2018

Я рекомендую использовать make вместо написания собственного скрипта сборки.Простой повторно используемый Makefile написать не так сложно:

CXX = g++.exe
CPPFLAGS ?= -O2 -Wall

# get all files whose extension begins with c and is at least 2 characters long,
# i.e. foo.cc, foo.cpp, foo.cxx, ...
# NOTE: this also includes files like foo.class, etc.
SRC = $(wildcard *.c?*)

# pick the first file from the above list and change the extension to .exe
APP = $(basename $(word 1, $(SRC))).exe

$(APP): $(SRC)
    $(CXX) $(CPPFLAGS) -o $@ $<

.PHONY: run
run: $(APP)
    @./$(APP)

.PHONY: debug
debug: $(APP)
    @gdb $(APP)

.PHONY: clean
clean:
    $(RM) $(APP)

make собирает программу (если требуется).make run выполняет программу после ее сборки.make debug запускает программу в gdb.make clean удаляет программу.

Вы можете переопределить CPPFLAGS по умолчанию, определив переменную среды:

$env:CPPFLAGS = '-g'
make
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...