我正在执行make
。在某个时候,它会进入src
并从那里尝试编译几个子目录中的源代码。它给出
gcc -x c++ -ggdb -ansi -pedantic -iquote/home/user1/code -Wall -Wcast-align -Wcast-qual -Wnested-externs -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes -Wshadow -fno-common -Dinline= -Wvariadic-macros -iprefix /home/user1/code/src/ -iwithprefix . -iwithprefix DataSet -iwithprefix Outputs -iwithprefix Solver -iwithprefix Tools -iwithprefix Models -iwithprefix Modules -iwithprefix Help -iwithprefix Common -iwithprefix Main -fPIC -fpermissive -c Common/Buffer.c -o Common/Buffer.o
make[1]: gcc: Permission denied
make[1]: *** [Makefile:140: Common/Buffer.o] Error 127
但如果执行(复制粘贴回显的命令)
$ cd src
$ gcc -x c++ -ggdb -ansi -pedantic -iquote/home/user1/code -Wall -Wcast-align -Wcast-qual -Wnested-externs -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes -Wshadow -fno-common -Dinline= -Wvariadic-macros -iprefix /home/user1/code/src/ -iwithprefix . -iwithprefix DataSet -iwithprefix Outputs -iwithprefix Solver -iwithprefix Tools -iwithprefix Models -iwithprefix Modules -iwithprefix Help -iwithprefix Common -iwithprefix Main -fPIC -fpermissive -c Common/Buffer.c -o Common/Buffer.o
它编译得很好。
可能的原因和解决办法是什么?
这几乎肯定是 gnulib(GNU Make 所依赖的)中此错误的一个实例:https://savannah.gnu.org/bugs/?57962
您没有说您使用的是哪个版本的 GNU Make,但我敢打赌它是 GNU Make 4.3。
您可以升级您的 GNU Make 版本,或者修复您的 PATH 以使其不包含任何具有子目录的目录
gcc
,或者将 Makefile 中的编译器路径更改为完全限定(以避免 PATH 搜索),或者在您的编译配方末尾添加分号(以强制 GNU Make 使用 shell 而不是使用其“快速路径”功能)。根据 MadScientist 的回答,我整理了以下脚本
并发现了罪魁祸首目录。然后我快速解决了这个问题
并且它成功了。