我正在撰寫一個makefile,我需要設定env。
我source /opt/intel/oneapi/setvars.sh用來設定我的環境,但我想在我的 Makefile 中創建它。
我在 Makefile 中搜索如何使用源代碼,并學會了這樣寫:
SHELL=/bin/bash
s:
source /opt/intel/oneapi/setvars.sh
CC = mpicc
OPT = -Ofast
CFLAGS = -Wall -std=c99 $(OPT) -fopenmp -march=native
LDFLAGS = -Wall -fopenmp
LDLIBS = $(LDFLAGS)
targets = benchmark-naive benchmark-omp benchmark-mpi
objects = check.o benchmark.o stencil-naive.o stencil-omp.o stencil-mpi.o
.PHONY : default
default : all
.PHONY : all
all : clean $(targets)
benchmark-naive : check.o benchmark.o stencil-naive.o
$(CC) -o $@ $^ $(LDLIBS)
benchmark-omp : check.o benchmark.o stencil-omp.o
$(CC) -o $@ $^ $(LDLIBS)
benchmark-mpi : check.o benchmark.o stencil-mpi.o
$(CC) -o $@ $^ $(LDLIBS)
%.o : %.c common.h
$(CC) -c $(CFLAGS) $< -o $@
.PHONY: clean
clean:
rm -rf $(targets) $(objects)
但是在運行之后make它只是加載我的環境并且什么都不做。誰能幫我把我的源代碼放在我的makefile中,同時保留我以前的makefile內容?
uj5u.com熱心網友回復:
如果未設定,您必須使用 env 集遞回呼叫 make:
ifndef <some test to see if env is missing>
%:
source /opt/intel/oneapi/setvars.sh $(MAKE) $(MAKECMDGOALS)
else
<normal makefile>
endif
uj5u.com熱心網友回復:
您可以查看以下生成檔案:
# makefile
all: prog
prog:
export ASD=asd
echo $$ASD
export ASD=asd; echo $$ASD
輸出是:
export ASD=asd
echo $ASD
export ASD=asd; echo $ASD
asd
makefile 不是 bash 腳本。“make”正在處理一個makefile,它為每一行創建一個子行程來運行一個shell來執行陳述句。您在一行中設定的變數僅對該子行程有效,它不會被繼承回父行程或后續子行程。
我知道這并不能解決您的問題,但至少它可以解釋為什么它不起作用。
uj5u.com熱心網友回復:
你可以試試這個:
SHELL=/bin/bash --rcfile /opt/intel/oneapi/setvars.sh
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/473085.html
