NDK编译cpp和c文件
来源:互联网 发布:淘宝靠谱的ipad二手店 编辑:程序博客网 时间:2024/05/17 08:48
NDK会自动编译LOCAL_SRC_FILES目录指定的cpp或c文件。如果是cpp会自动用c++编译器,如果是c那么自动用c编译器。
mk文件有一个LOCAL_CPP_EXTENSION属性,设置的是用c++编译的文件后缀。下面是官方描述:
Note that the default extension for C++ source files is '.cpp'. It ishowever possible to specify a different one by defining the variableLOCAL_CPP_EXTENSION. Don't forget the initial dot (i.e. '.cxx' willwork, but not 'cxx').
我们可以指定, .cxx文件也由c++编译器编译。
那么我们如何指定c编译器编译呢,很遗憾没有这个设定。但是还是有办法的,就是修改ndk的脚本,在NDK目录例如,android-ndk-r8\build\core的build-binary.mk文件控制了编译过程。
## Check LOCAL_CPP_EXTENSION, use '.cpp' by default#bad_cpp_extensions := $(strip $(filter-out .%,$(LOCAL_CPP_EXTENSION)))ifdef bad_cpp_extensions $(call __ndk_info,WARNING: Invalid LOCAL_CPP_EXTENSION values: $(bad_cpp_extensions)) LOCAL_CPP_EXTENSION := $(filter $(bad_cpp_extensions),$(LOCAL_CPP_EXTENSIONS))endifLOCAL_CPP_EXTENSION := $(strip $(LOCAL_CPP_EXTENSION))ifeq ($(LOCAL_CPP_EXTENSION),) LOCAL_CPP_EXTENSION := .cppelseendif
这段控制编译c++的文件后缀,默认是.cpp
$(foreach src,$(filter %.c,$(LOCAL_SRC_FILES)), $(call compile-c-source,$(src),$(call get-object-name,$(src))))$(foreach src,$(filter %.S %.s,$(LOCAL_SRC_FILES)), $(call compile-s-source,$(src),$(call get-object-name,$(src)))) $(foreach src,$(filter $(all_cpp_patterns),$(LOCAL_SRC_FILES)),\ $(call compile-c-source,$(src),$(call get-object-name,$(src)))\)
这段是调用脚本编译c和cpp文件, 这里我把cpp文件也由c编编译器来编译了,call compile-c-source 这句就是调用c的编译器编译。
最终,.cpp文件也会有c编译器编译,控制台会输出Compile thumb ,而不是Compile thumb++。
为什么要这么做,因为NDK的例子,添加了NDKdebug功能后,我发现c文件eclipse不能正确导入头文件,而把文件改成cpp就可以,这是NDK native debug功能的一个bug。所以如果我们写c代码,改成cpp后缀,就能正确使用eclipse的代码提示和编译,在用c编译器编译cpp文件。
1 0
- NDK编译cpp和c文件
- NDK编译时cpp文件出错
- .c文件和.cpp文件导致的编译问题
- .C和.CPP后缀文件的编译区别
- JNI-ndk编译cpp
- 用ndk编译C文件
- NDK编译C/C++文件
- .c 文件和 .cpp 文件
- NDK编译cpp文件出现的-Werror=format-security
- MATLAB 调用编译.c/.cpp文件
- NDK编译多个cpp
- cpp文件编译正确 c文件编译一堆错误
- Android 非NDK方式编译C文件
- Android使用NDK编译C/C++文件
- .C文件和.CPP文件的区别
- 在Linux(Ubuntu)中使用终端编译并运行.c和.cpp文件
- .c/.cpp文件windows命令行下编译,运行.c/.cpp文件
- .c/.cpp文件windows命令行下编译,运行.c/.cpp文件
- VS2012常用设置
- Android OpenGL ES 开发教程(5):关于EGL
- Codeforces Round #260 (Div. 2)C. Boredom(dp)
- 工作第六天日志
- 说明:
- NDK编译cpp和c文件
- cocos2d-x与c++学习1
- STL 之 iterator traits 备忘
- MinGW VS Cygwin
- codeforces #260 B. Fedya and Maths(水)
- IE浏览器兼容问题解决办法
- Runtime(一)
- 黑马程序员-Java语法基础
- Learning OpenCV Chapter3 初探OpenCV下