我正在使用makefile进行一些练习,并注意到我尝试编译的.cpp文件在尝试执行相应的.out文件时给出了 Permissione Denied 错误。我还注意到使用-c
指令似乎是个问题。这是因为当我这样做时:
singleton_template_main.o: singleton_template_main.cpp singleton.h
g++ -c singleton_template_main.cpp -o singleton_template_main.out
我收到错误,但是当我这样做时:
singleton_template_main.o: singleton_template_main.cpp singleton.h
g++ singleton_template_main.cpp -o singleton_template_main.out
我没有错误。问题是什么?
我正在使用macOS Sierra。
答案 0 :(得分:3)
-c
标志编译代码(禁止链接),生成中间目标文件 - 这不可执行。还值得注意的是,在这种情况下,将输出文件命名为 .out 可能不可取,对象文件的约定是扩展名,例如 .o 和 .obj 等。
删除-c
标志会导致编译器根据需要编译和链接代码,从而生成可执行文件 - 因此它会按预期运行。
答案 1 :(得分:0)
您的命令(-o singleton_template_main.out
而不是-o singleton_template_main.o
)错误输出了输出文件。最好在命令中使用$@
来避免这样的错误:
singleton_template_main.o: singleton_template_main.cpp singleton.h
g++ singleton_template_main.cpp -o "$@"
甚至
singleton_template_main.o: singleton_template_main.cpp singleton.h
$(COMPILE.cpp) $(OUTPUT_OPTION) $<
您可能还需要显式链接为C ++:
singleton_template_main: LINK.o = $(LINK.cc)