Can someone point me to a description of how the internals are organized? I'm looking for a short detailed description of things like linker search paths, preprocessor symbol definitions, where libraries and header files are located, file and directory naming conventions, etc.
...
...
Coming from Greenleaf/Microsoft C (and Visual C++) background, the organization of include ".h" files to me seem very similar except the lack of a real "make" file controlled by the end user. Also, unfamiliar to me was the multiple copies of similar header files apparently for different hardware but not well described anywhere until you look inside the content of those include files.
After initially digging into those includes, I conclude that the drop down selections (like what CPU and what Arduino board type, etc.) merely pre-define some #define names and include the right header. I largely left it alone as something that I really don't need to know how it does it as long as it works. Should I ever need to really know, (if I recalled correctly), Arduino IDE does have an option to be verbose about what it is doing - to the point of keeping all the temp files so looking into those temp files can tell me what the #define names expansions becames and what went on each step of the process.
The part the IDE I found most annoying (and initially confused the daylight out of me) - The IDE "make" is annoying in the short cuts it took in the spirit of making it simple but instead made it confusing:
I am still using V1.6.x, newer ones might have fixed this problem. It automatically include all the .c/.cpp/.ino files in your project directory. If I copied currentVersion.c to versionYesterdayAsBackup.c and left it in the same project folder, it would automatically compile both and link both into the project which of course causes a ton of compile/link errors. Since this is done behind the scenes, I have no control of it. I would prefer to have a drop down box or something that specify any additional files I wish to compile/link into this project instead of just grabbing everything in my project folder chain.