Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
459 views
in Technique[技术] by (71.8m points)

c - Setting alias for GCC in Windows PowerShell

I'm trying to set up a "gcc99" alias in Windows PowerShell which is equal to "gcc -std=C99 -pedantic -Wall". The idea is to use fewer keystrokes to ensure that GCC is running in c99 mode. (I've tried my best to adapt the guidelines in the following post to Windows PowerShell: Setting std=c99 flag in GCC)

When I try to compile after setting up such an alias (exhibit 1 below), I receive an error. As reference, I don't receive this error if I use the extended command to compile (exhibit 2 below). As a test, I tried setting gc99 as an alias for "gcc" (no additional values) and it worked fine (exhibit 3 below). Please ignore the many warnings which I have yet to address in code :)

Any suggestions?

(I'm not sure why my captions aren't showing up for the images below. I'm using the auto-created format for pictures, e.g., for the first image: "Caption" followed by "1: link" on the next line.)

Exhibit 1: Error when trying to compile via a "gcc99" alias which is set to "gcc -std=c99 -pedantic -Wall"

Exhibit 2: It works fine when compile directly via "gcc -std=c99 -pedantic -Wall"

Exhibit 3: It works fine when compiling via a "gcc99" alias which is set to "gcc", which makes me think that I'm incorrectly setting the additional values in Exhibit 1

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Aliases in PowerShell are different from aliases in Unix shells. You can only alias the name of a cmdlet, function or program, not include parameters. Quoting from Get-Help Set-Alias:

NAME
    Set-Alias

SYNOPSIS
    Creates or changes an alias (alternate name) for a cmdlet or other command
    element in the current Windows PowerShell session.


SYNTAX
    Set-Alias [-Name]  [-Value]  [-Description ] [-Force]
    [-Option ] [-PassThru] [-Scope ] [-Confirm]
    [-WhatIf] []


DESCRIPTION
    The Set-Alias cmdlet creates or changes an alias (alternate name) for a
    cmdlet or for a command element, such as a function, a script, a file,
    or other executable. You can also use Set-Alias to reassign a current alias
    to a new command, or to change any of the properties of an alias, such as
    its description. Unless you add the alias to the Windows PowerShell profile,
    the changes to an alias are lost when you exit the session or close Windows
    PowerShell.

What you can do to run an external program with a default set of arguments is to define that default set as an array and run the program like this:

$CARGS = '-std=C99', '-pedantic', '-Wall'
gcc $CARGS -more arguments here ...

As @ChrisN suggested in the comments below, if you want the variable $CARGS pre-defined in all your PowerShell instances, you can add it to a custom PowerShell profile (e.g. %UserProfile%DocumentsWindows-PowerShellprofile.ps1 for your user).


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...