You can achieve this through judicious use of pattern rules in your makefile, thanks to two features of gmake pattern rule matching. First, gmake attempts to match patterns in the order they are declared; second, a pattern matches if and only if all of the prereqs in the pattern can be satisfied (either they already exist as files, or there is a rule to make them). So, if you write your makefile like this:
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp $(SRC_DIR)/%.h
$(CPPC) -c $(FLAGS_DEV) $< -o $@
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
$(CPPC) -c $(FLAGS_DEV) $< -o $@
gmake will match the first pattern for those files that have a corresponding .h file, and the second for those that do not. Of course the up-to-date checks will behave as expected as well (eg, "foo.o" will be considered out-of-date if "foo.h" exists and is newer).
You may want to use another variable to eliminate the redundancy between these two rules; eg:
COMPILE=$(CPPC) -c $(FLAGS_DEV) $< -o $@
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp $(SRC_DIR)/%.h
$(COMPILE)
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
$(COMPILE)