Quantcast
Viewing all articles
Browse latest Browse all 22113

How do I use GCC options -iprefix and -iwithprefix?

I have a c++ application that is separated into modules. The directory structure for each module looks like this:

module_a/
  export/  <-- module_a public interface
  src/     <-- module_a private source
  test/
    src/   <-- unittests for module_a

I'm using CMake to setup the module dependencies and to build the application. If module_a depends on module_b then module_b's export directory is added as include path when building module_a.

So, if there is a file module_b/export/foo.h that module_a needs then in a source file you will use #include "foo.h".

I'm looking for a way to to make so that the module name is part of the include directive. So for the above example I want to (have to) write #include "module_b/foo.h".

Is this something that can be done with GCC option -iprefix and -iwithprefix? I've searched for usage examples but all I can find is copies and references back to the GCC manual, which I think doesn't explain it very well.

I have tried to use it this way:

$ find -type f
./src
./src/main.cc
./export
./export/bar.h

$ g++ -iprefix foo/ -iwithprefix export/ src/main.cc
src/main.cc:1:10: fatal error: foo/bar.h: No such file or directory
    1 | #include "foo/bar.h"
      |          ^~~~~~~~~~~
compilation terminated.

$ gcc --version
gcc (Debian 9.2.1-17) 9.2.1 20191102

But as you can see, it doesn't work. How should I use -iprefix and -iwithprefix?

Also, does anyone have another solution to my problem? I'm a bit worried that IDEs and other compilers might not understand -iprefix and -iwithprefix, so any other solutions are welcome as well.

Edit: after posting this question I immediately realized that perhaps -iprefix foo/ -iwithprefix bar is just a fancy way of writing -I foo/bar. However, I tested that and I still didn't get it to work. So it would still be good if someone could explain how these options works, even if they are not going to help me for my problem.


Viewing all articles
Browse latest Browse all 22113

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>