使用GCC一起编译C和C ++文件

我正在尝试使用GCC一起编译C和C ++源代码。

gcc -std=c++0x test.cpp -std=c99 test.c -lstdc++

现在,这个工作正常,除了我得到两个警告。

 cc1plus: warning: command line option "-std=c99" is valid for C/ObjC but not for C++ cc1: warning: command line option "-std=c++0x" is valid for C++/ObjC++ but not for C 

因此我无法使用-Werror进行此设置。 能以某种方式抑制这些警告吗?

单独编译文件,与g ++链接

 gcc -c -std=c99 -o file1.o file1.c g++ -c -std=c++0x -o file2.o file2.cpp g++ -o myapp file1.o file2.o 

如果有人想知道在Android中执行此操作的最佳方法,那就是:

 LOCAL_CFLAGS := -Werror LOCAL_CONLYFLAGS := -std=gnu99 LOCAL_CPPFLAGS := -std=c++0x 

gcc是C编译器, g++是C ++编译器。 您正在混合使用不同风格的两种语言。 分开编译然后链接:

 gcc -std=c99 -c -o test.co test.c g++ -std=c++0x -c -o test.cpp.o test.cpp g++ -o executable test.cpp.o test.co 

而不是使用gcc使用g ++那是.cpp和c文件。

这与Android NDK非常相关。 幸运的是,有一个丑陋的解决方法。 要将所有C文件编译为c99 ,并将所有CPP文件编译为c++0x ,请将以下行添加到Android.mk文件中:

 LOCAL_CPPFLAGS += -std=c++0x LOCAL_C99_FILES := $(filter %.c, $(LOCAL_SRC_FILES)) TARGET-process-src-files-tags += $(call add-src-files-target-cflags, $(LOCAL_C99_FILES), -std=c99) 

这适用于带有arm-linux-androideabi-4.6工具链的最新NDK r8b,但我无法保证它在未来的版本中可以使用,而且我没有用早期版本测试它。

我也遇到了这个问题。 我没有找到使用单行编译c和c ++的方法,但是使用autotools autoconf它将为每个.c和.cpp或.cc生成正确的配置和Makefile以单独编译它们然后链接它们。 https://www.gnu.org/software/automake/manual/html_node/Autotools-Introduction.html