Pergunta

I have a compilation rule as follows,

    $(compiled_objs) : $(obj_dir)/%.o: $(src_base)/%.cpp

It creates .o dso objects from specific .cpp files in src_base and works fine.

Question: My question is that is there a way in gnu Makefiles to sort the order in which %.cpp files are processed. For example, in each src_base, i have a file called xxxLast.cpp and i want to create the object for *Last.cpp after all other .cpp files from $src_dir directory has already been processed.

Use-Case: My use case is not common but i want to embedd the md5sum of all other .o objects in xxxLast.cpp file for which i can add additional handling in my rule.

I haven't done much work on makefiles. Help will be highly appreciated and thanks in advance.

Foi útil?

Solução

Somewhere else in your makefile you'll have a target that depends on $(compiled_objs):

all_objects: $(compiled_objs)

Make will build the prerequisites of any target in the order they are listed. So if you want a particular object to be built last, then you just put it at the end of the compiled_objs macro.

Be aware that during parallel builds make will still walk the commands to run in the same order, BUT due to parallelization effects they may actually run in a different order, or at least you can't know that the last one will be started after all the previous ones have completed.

For your situation I really don't recommend just stucking the last object at the end and hoping. You should define this relationship explicitly using make rules, so:

all_objects: xxxLast.o

xxxLast.o: $(compiled_objs-but-not-xxxLast.o)
        ...generate md5sums for $^...

xxxLast.o $(compiled_objs-but-not-xxxLast.o): $(obj_dir)/%.o: $(src_base)/%.cpp
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top