.out使用-c指令和g ++拒绝权限

时间:2017-01-18 10:22:45

标签: c++ macos makefile compilation g++

我正在使用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。

2 个答案:

答案 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)