I suggest you look at the build system for existing libraries like Boost or my own Stroika.
These are two open source libraries with relatively simple branch structures (in git). They are both cross platform.
In both cases, there is no connection between branching and platforms. Generally - you will want to use a directory hierarchy with your source code so its logically organized. And if you have some platform-specific code, often libraries will segregate that into a platform specific folder (e.g. Library/Sources/Stroika/Foundation/Execution/Platform/POSIX
versus Library/Sources/Stroika/Foundation/Execution/Platform/Windows
)
A time where you would want to use branching in a way that was related to platform, is if you wanted to add experimental code to support a new platform and didn't want that to interfere with other work. But once the new 'feature'/platform is working, it generally gets integrated back to the main branch.
What Stroika does for the issue you are saying - about automake - is that its build system (makefiles) create a folder called "Configurations" which contains essentially the input for the automake process. Then the build makefiles create folders IntermediateFiles/{CONFIGNAME}
for each configuration, and Builds/{CONFIGNAME}
for each configuration. This is not checked in (so has nothing to do with source control). It's just artifacts that are part of the build process.
industry practice for C++ projects that are OS agnostic
...#ifdef
? ;)