当前位置: 技术问答>linux和unix
为什么在同一个文件夹下面新建一个程序文件,然后修改Makefile,就出错?
来源: 互联网 发布时间:2016-11-10
本文导语: cygwin的环境,建立一个文件夹,然后在这个文件夹下面写一个CudaProgram.cu的程序。然后写个Makefile NVCC = /usr/local/cuda/bin/nvcc CUDAPATH = usr/local/cuda NVCCFLAGS = -I/usr/openwin/include –I$(CUDAPATH)/include LFLAGS = -L/usr/openwin/lib ...
cygwin的环境,建立一个文件夹,然后在这个文件夹下面写一个CudaProgram.cu的程序。然后写个Makefile
NVCC = /usr/local/cuda/bin/nvcc
CUDAPATH = usr/local/cuda
NVCCFLAGS = -I/usr/openwin/include –I$(CUDAPATH)/include
LFLAGS = -L/usr/openwin/lib –L/usr/X11R6/lib –lX11 -L$(CUDAPATH)/lib64 –lcuda –lcudart -lm
CudaProgram:
$(NVCC) $(NVCCFLAGS) $(LFLAGS) –o CudaProgram2 CudaProgram.cu
然后编译成功。
然后我在同一个文件夹下面又写个CudaProgram2.cu的程序,然后修改先写的那个Makefile如下:
NVCC = /usr/local/cuda/bin/nvcc
CUDAPATH = usr/local/cuda
NVCCFLAGS = -I/usr/openwin/include –I$(CUDAPATH)/include
LFLAGS = -L/usr/openwin/lib –L/usr/X11R6/lib –lX11 -L$(CUDAPATH)/lib64 –lcuda –lcudart -lm
CudaProgram2:
$(NVCC) $(NVCCFLAGS) $(LFLAGS) –o CudaProgram2 CudaProgram2.cu
然后再make, 就出现:make: 'CudaProgram2' is up to data.
然后我再把Makefile 文件最后一行改成
$(NVCC) $(NVCCFLAGS) $(LFLAGS) –o CudaProgram3 CudaProgram2.cu
再make,出现 make: 'CudaProgram2' is up to data.
然后运行 ./CudaProgram3
提示没有这个文件。
然后修改倒数第二行为:
CudaProgram3:
$(NVCC) $(NVCCFLAGS) $(LFLAGS) –o CudaProgram2 CudaProgram2.cu
貌似就可以编译了。
这是为啥?
NVCC = /usr/local/cuda/bin/nvcc
CUDAPATH = usr/local/cuda
NVCCFLAGS = -I/usr/openwin/include –I$(CUDAPATH)/include
LFLAGS = -L/usr/openwin/lib –L/usr/X11R6/lib –lX11 -L$(CUDAPATH)/lib64 –lcuda –lcudart -lm
CudaProgram:
$(NVCC) $(NVCCFLAGS) $(LFLAGS) –o CudaProgram2 CudaProgram.cu
然后编译成功。
然后我在同一个文件夹下面又写个CudaProgram2.cu的程序,然后修改先写的那个Makefile如下:
NVCC = /usr/local/cuda/bin/nvcc
CUDAPATH = usr/local/cuda
NVCCFLAGS = -I/usr/openwin/include –I$(CUDAPATH)/include
LFLAGS = -L/usr/openwin/lib –L/usr/X11R6/lib –lX11 -L$(CUDAPATH)/lib64 –lcuda –lcudart -lm
CudaProgram2:
$(NVCC) $(NVCCFLAGS) $(LFLAGS) –o CudaProgram2 CudaProgram2.cu
然后再make, 就出现:make: 'CudaProgram2' is up to data.
然后我再把Makefile 文件最后一行改成
$(NVCC) $(NVCCFLAGS) $(LFLAGS) –o CudaProgram3 CudaProgram2.cu
再make,出现 make: 'CudaProgram2' is up to data.
然后运行 ./CudaProgram3
提示没有这个文件。
然后修改倒数第二行为:
CudaProgram3:
$(NVCC) $(NVCCFLAGS) $(LFLAGS) –o CudaProgram2 CudaProgram2.cu
貌似就可以编译了。
这是为啥?
|
因为你的目标就是CudaProgram2。即使你在命令行里写了-o CudaProgram3 ,make也不知道你要的结果是CudaProgram3 。make只认冒号前面的东西,只有那个是make的目标。
|
CudaProgram2:
$(NVCC) $(NVCCFLAGS) $(LFLAGS) –o CudaProgram2 CudaProgram2.cu
CudaProgram2是默认目标,又是要生成的目标好像有冲突吧
$(NVCC) $(NVCCFLAGS) $(LFLAGS) –o CudaProgram2 CudaProgram2.cu
CudaProgram2是默认目标,又是要生成的目标好像有冲突吧