I should rephrase the main problem because I missed a part:
So on Linux cythonizing modules in a subfolder that externs from CPP code and cimports each other works fine unless there's a __init__.pxd/py file in the subfolder, in which case I get a 'other.pxd' not found error when one module cimports another, say "main" cimports "other".
On Windows cythonizing the same modules immediately fails if there's no __init__.pxd/py file, the module.pxd files are simply not found prior to evaluating any cimport statements.
Otherwise (this part I forgot to mention) cythonizing will initially find the module.pxd files, but will still fail when one module cimports another.
So for now it seems like I have no choice if I want to compile these on Windows but to avoid having any of the modules cimport each other. and will instead have to combine modules that depend on others (A depends on B, combine A and B)?
I realize maybe it's bad practice in general to have a module or shared library depend on other modules or shared libraries, but the smaller or more fragmented modules are, the less compilation time it should take in the case that I only change and recompile a single module, at least that was the idea, I'm sure it probably depends on the size of the library as well.
(Still after combining modules so that there's no more cimports between modules)
I'm also having some issues with what extern paths to use regardless of OS.
For cythonize to compile the modules both pyx and pxd paths must be "cpp/file.cpp".
However for the compilation of the main program cimporting these the pyx path must be "cpp/file.cpp" and pxd path "modules/cpp/file.cpp".
At least that's the current standing as I haven't found a solution.
If I use "modules/cpp/file.cpp" for both pyx and pxd then neither the modules nor the main program will compile and so on.
In either case of an error the error is an #include failing with "no such file or directory".