While I was compiling OmniRom for my T-mobile Samsung Galaxy S4 (JFLTETMO SGH-M919), I ran into this common error:
make: *** No rule to make target `/home/alaskalinuxuser/Documents/projects/phones/compile/omni5/out/target/product/jfltetmo/obj/SHARED_LIBRARIES/libmedia_intermediates/export_includes’, needed by `/home/alaskalinuxuser/Documents/projects/phones/compile/omni5/out/target/product/jfltetmo/obj/SHARED_LIBRARIES/libandroid_runtime_intermediates/import_includes’. Stop.
Often during the compiling process, some file making process is supposed to output a file (export_icludes) that needs to be imported somewhere else (import_includes). The idea behind these files, as far as I can tell, is a sort of baton pass of information. If you take a look at these files, most of them are empty, because they don’t actually need to pass on any information. Sometimes, however, they do have a piece of code or other pertinant information that is used by the next make process to build something.
There are four ways that I know of to fix this problem. The BEST way to fix this problem would be to review the code (.cpp, header files, etc.) and tell the offending party to output a proper export_includes file. The CLEAN way to fix this problem is to edit the code of the import_includes file to quit asking for that export_includes file. A QUICK way to fix this problem is to copy the needed file from some other build of the same device, so it will hopefully include the right information. The DIRTY FIX is to simply create the folder needed, and put an empty file in there named export_includes.
So, I used the ‘dirty fix’ of simply creating an empty file at that location by that name. Esentially I am saying to the next part of the compilation that there was no information from the previous part to pass on. If that is true, then it should work. If that is not true, but the information is irrelevant, then it still should work. If it is not true and the information is relevant, then there will be problems, to be sure!
$ mkdir /home/alaskalinuxuser/Documents/projects/phones/compile/omni5/out/target/product/jfltetmo/obj/SHARED_LIBRARIES/libmedia_intermediates
$ touch /home/alaskalinuxuser/Documents/projects/phones/compile/omni5/out/target/product/jfltetmo/obj/SHARED_LIBRARIES/libmedia_intermediates/export_includes
Provided that no information actually did need to get passed on, then this is acceptable. It would be better, however, to fix the code to add the needed lines to create the said file automatically during the compiler process with all the proper information. In keeping with my “keep it simple” motto, I am opting not to do that.
Linux – Keep it simple.