我正在尝试在cygwin上编译一个简单的程序。我不知道为什么我的IDE(Netbeans)试图使用'-c'标志。在项目属性 - > C ++编译器 - >其他选项中,我没有'-c'标志。如何解决这个问题?
"/usr/bin/make" -f nbproject/Makefile-Release.mk QMAKE= SUBPROJECTS= .clean-conf
make[1]: Entering directory '/cygdrive/c/Users/user/Documents/NetBeansProjects/CppApplication_3'
rm -f -r build/Release
rm -f dist/Release/Cygwin-Windows/cppapplication_3.exe
make[1]: Leaving directory '/cygdrive/c/Users/user/Documents/NetBeansProjects/CppApplication_3'
CLEAN SUCCESSFUL (total time: 1s)
"/usr/bin/make" -f nbproject/Makefile-Release.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory '/cygdrive/c/Users/user/Documents/NetBeansProjects/CppApplication_3'
"/usr/bin/make" -f nbproject/Makefile-Release.mk dist/Release/Cygwin-Windows/cppapplication_3.exe
make[2]: Entering directory '/cygdrive/c/Users/user/Documents/NetBeansProjects/CppApplication_3'
mkdir -p build/Release/Cygwin-Windows
rm -f build/Release/Cygwin-Windows/main.o.d
i686-pc-mingw32-g++ -E -c -O2 -I/usr/include -I/usr/include/apr-1 -I/usr/include/libxml2 -I/usr/include/boost -I/usr/local/apr -std=c++11 -MMD -MP -MF build/Release/Cygwin-Windows/main.o.d -o build/Release/Cygwin-Windows/main.o main.cpp
mkdir -p dist/Release/Cygwin-Windows
i686-pc-mingw32-g++ -E -o dist/Release/Cygwin-Windows/cppapplication_3 build/Release/Cygwin-Windows/main.o
i686-pc-mingw32-g++: warning: build/Release/Cygwin-Windows/main.o: linker input file unused because linking not done
make[2]: Leaving directory '/cygdrive/c/Users/user/Documents/NetBeansProjects/CppApplication_3'
make[1]: Leaving directory '/cygdrive/c/Users/user/Documents/NetBeansProjects/CppApplication_3'
BUILD SUCCESSFUL (total time: 1s)
答案 0 :(得分:2)
-c
标志不是附加标志,它是IDE用来告诉编译器将源文件(例如main.cpp
)编译成目标文件的基本标志之一(例如。main.o
)。它也没有用在给你警告信息的命令上。
然而,什么是附加标志是-E
标志,您可以看到在g++
被调用的两次使用。根据{{3}},这是-E
标志的作用:
在预处理阶段后停止;不要正确运行编译器。输出是在表单中 预处理源代码,发送到标准输出。
忽略不需要预处理的输入文件
您没有看到预处理的源代码,因为您提供的-o
选项告诉它将其放入文件中。如果查看build/Release/Cygwin-Windows/main.o
,您会发现它是一个文本文件,其中包含通过预处理器传递源代码的结果。但实际上它应该是一个二进制文件,是在目标文件中编译代码的结果。
所以希望解决方案显而易见,从其他选项中删除-E
标志。