Search code examples
filecompilationmakefile

How to check if a directory doesn't exist in make and create it


In my project's directory, I have some subdirs: code/, export/, docs/ and object/. What make does is simply compile all the files from the code dir, and put the .o files into the object dir.

The problem is, I told git to ignore all .o files, because I don't want them uploaded, so it doesn't track the object dir either. I'm actually OK with that, I don't want the object/ uploaded to my GitHub account as well, but with the current solution (which is a simple empty text file inside the object/ dir), the directory does get uploaded and needs to be present before the build (the makefile just assumes it's there).

This doesn't really seem like the best solution, so is there a way to check if a directory doesn't exist before the build in a make file, and create it if so? This would allow for the object dir not to be present when the make command is called, and created afterwards.


Solution

  • Just have a target for it:

    object/%.o: code/%.cc object
        compile $< somehow...
    
    object:
        mkdir $@
    

    You have to be a little more careful if you want to guard against the possibility of a file called "object", but that's the basic idea.