微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用Powershell脚本将makefile变量CC,CFLAGS等设置为终端或cmd?

如何解决如何使用Powershell脚本将makefile变量CC,CFLAGS等设置为终端或cmd?

我想编写独立于平台的Makefile的环境变量设置脚本,该脚本可以设置Makefile的环境变量,例如CC,CFLAGS,LDFLAGS,LD等。这是我的make文件。我想根据用户需要在Window或Linux上运行它。因此,我不想编写每次都可以设置CC,CFLAGS,LDFLAGS和LD的脚本,而是可以根据用户使用的平台为用户设置变量。

LDFLAG=-L..\..\test\lib
LIBS=-ltestlibs
INCLUDES = ..\..\test\inc
SRCS = $(wildcard *.c)
OBJS = $(SRCS:.c=.o)
EXECUTABLE = targetimage.exe
.PHONY: clean

all:  myprog

myprog: $(OBJS)
    $(CC) $(OBJS) $(LDFLAG) $(LIBS) -o $(EXECUTABLE)

$(OBJS): $(SRCS) $(INCLUDES)
    $(CC) $(CFLAGS) -I$(INCLUDES) -c $(SRCS)

clean:
    $(RM) $(OBJS) $(EXECUTABLE)

我知道.sh脚本,但是它可以在CYGWIN或MINGW上运行。

    #!/bin/sh

echo "Finding the current OS type"
echo
osType="$(uname -s)"
#osType=$1
case "${osType}" in
                "CYGWIN")
                {
                        echo "Running on CYGWIN."
                        CURRENT_OS=CYGWIN
                        export CC=""
                } ;;
                Linux*)
                {
                        echo "Running on Linux."
                        CURRENT_OS=Linux
                        export CC="-g -Wall"
                } ;;
                "MINGW")
                {
                        echo "Running on MINGW."
                        CURRENT_OS=MINGW
                } ;;
                "Thor96")
                {
                        source /opt/fsl-imx-xwayland/4.14-sumo/environment-setup-aarch64-poky-linux
                        CURRENT_OS=THOR96
                };;
                *)
                {
                        echo "Unsupported OS:${osType},exiting"
                        exit
                } ;;
esac
echo ${CURRENT_OS}

但是它只能在Linux上运行。那么,如何使用powershell .ps1脚本实现相同的目的?因此,相同的脚本可以在任何平台上运行。 我已经草拟了此.ps1文件以供参考,但由于不确定其是否正确,因此需要对其进行更新。请为我提供适当的解决方案。我无法为此找到合适的解决方案。

Function RunOn-Windows
{
Write-Host 'The Script is Running on a Windows Machine'
$Env:CC = "gcc"
}

Function RunOn-Linux
{
Write-Host 'The Script is Running on a Linux Machine'
$Env:CC = "gcc"
}

Function RunOn-Mac
{
Write-Host 'The Script is Running on a Mac'
}

Function RunOn-Other
{
Write-Host 'The Script is Running on a Other'
$Env:CC = "aarch64-poky-linux-gcc"
}

If ($IsWindows) 
    {RunOn-Windows}
elseif ($IsLinux) 
    {RunOn-Linux}
elseif ($IsMacOS) 
    {RunOn-Mac}
else
    {RunOn-Other}

解决方法

我没有Windows盒子可以进行测试,但是如果您的Windows可以使用GNU,则有可能您可以在Makefile中执行所需的操作:

# List supported OS (as returned by uname -s,case sensitive)
SUPPORTED_OS := CYGWIN Linux MINGW Darwin

# Get OS
OS             := $(shell uname -s)

# Check if OS is supported
ifneq ($(filter-out $(SUPPORTED_OS),$(OS)),)
$(error Unsupported OS: $(OS))
endif

# Define all OS-dependent make variables as OS_VARIABLE
# Linux:
Linux_CC       := gcc
Linux_CFLAGS   := -g -Wall
Linux_LDFLAGS  := ...
# CIGWIN:
CYGWIN_CC      := ...
CYGWIN_CFLAGS  := ...
CYGWIN_LDFLAGS := ...
...

# Assign make variables
CC      := $($(OS)_CC)
CFLAGS  := $($(OS)_CFLAGS)
LDFLAGS := $($(OS)_LDFLAGS)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。