Search code examples
cmakefilepathpreprocessor

How do I set include paths when not using an IDE so it isn't cumbersome


I've been trying to work without an IDE. Now I'm setting up a project that I had done on stm32cubeIDE. I got to the point where I'm adding headers and such to the main.c file. In the IDE I was able to tell the IDE where to look for headers, like the driver folder or w/e I called it. Without IDE, I had to go and change the path in the #include statement such that

#include "cooldriver.h"

became

#include "driver/cooldriver.h"

Then,I also have to change cooldriver.c's path to point to the right path. Is there a way to simplify this so I don't have to go through and change all the #includes and just keep what I had. I'm working in linux env and using arm-none-eabi-gcc. The path i have is like,

  • main.c

  • Makefile

  • drivers

    • Inc

      • driver1.h

      • driver2.h

    • Src

      • driver1.c

      • driver2.c

TLTR: I want to tell compiler where to look for header files without an ide and without rewriting all the include statements. Thanks.


Solution

  • TLTR: I want to tell compiler where to look for header files without an ide and without rewriting all the include statements.

    Among their many available command-line options, compilers accept some that tell them about paths to search for headers and external libraries. On UNIX-heritage systems, the traditional one for paths that #include should consider is -I. Your compiler's documentation will provide more detail.

    The traditional approach would be to set one or more variables in your makefile to contain the wanted command-line flags, and to expand those variables where appropriate in your make recipes. Sticking with convention, I would use variable CPPFLAGS for -I and other flags directed toward the C preprocessor.