2

これら 2 つのコマンドが 2 つの異なる結果を返す理由が不思議です。最初のものは次のとおりです。

[root@node30 par-run-d2]# make -C NQU/
make: Entering directory `/home/ut/gpgpu-sim/benchmarks/par-run-d2/NQU'
nvcc  -c -arch sm_11 --keep --compiler-options -fno-strict-aliasing \
        -I. -I/usr/local/cuda//include/ -I/home/ut/NVIDIA_GPU_Computing_SDK/C//common/inc/ \
          -L/home/ut/NVIDIA_GPU_Computing_SDK/C//lib -lcutil -DUNIX nqueen.cu -o nqueen 
nqueen.cu(681): warning: variable "start" was declared but never referenced

nqueen.cu(681): warning: variable "end" was declared but never referenced

nqueen.cu(681): warning: variable "start" was declared but never referenced

nqueen.cu(681): warning: variable "end" was declared but never referenced

gcc -g -c nqueen.cu.cpp -o nqueen.cu_o
echo ../../..
../../..
../../../scripts/gen_ptxinfo
Generating nqueen.ptxinfo...
make: *** [nqueen.cu_o] Error 255
make: Leaving directory `/home/ut/gpgpu-sim/benchmarks/par-run-d2/NQU'

2 つ目は次のとおりです。

[root@node30 par-run-d2]# cd NQU/
[root@node30 NQU]# make
g++  -g nqueen.cu_o -L../../../libcuda/ -lcuda \
        -L/home/ut/NVIDIA_GPU_Computing_SDK/C//lib -lcutil \
        -L../../../src/ -lgpgpusim \
        -L../../../src/intersim -lintersim \
        -L../../../src/cuda-sim/ -lgpgpu_ptx_sim \
        -lm -lz -lGL   -o gpgpu_ptx_sim__nqueen
rm -rf *.cpp*.i *.cpp*.ii *.cu.c *.cudafe*.* *.fatbin.c *.cu.cpp *.linkinfo *.cpp_o core *.cubin cubin.bin *_o *.hash nqueen

「make -C X」が「cd X/; make」と異なる理由は何ですか?

4

1 に答える 1

1

シーケンスcd X; makeは、呼び出し元のシェル (端末の対話型シェル) の現在のディレクトリを変更しています。それを避けるためにサブシェルを作成します。これは、プロセス内でsyscallを実行する(cd X; make)よりも入力に時間がかかるため、親プロセスの作業ディレクトリを変更できません(通常、インタラクティブシェル)。 make -C Xchdirmake

また、-wフラグの動作も異なります。そして$(MAKE)Makefile-s での再帰のほとんどは、-C somesubdir

PS。cdシェル ビルトインは、親プロセスに影響を与えない chdir(2) syscall を呼び出すことに注意てください。

于 2012-09-17T21:05:09.610 に答える