In the toplevel Makefile, we have standardized on using "order-only prerequisites", using the "|" construction. These are not working as intended. Example: .PHONY: client-osx-iso client-osx-iso: cbrun osx64 $(MAKE) -C client $(CLIENT_OSX_ISO_NAME) client/$(CLIENT_OSX_ISO_NAME): | client-osx-iso $(CLIENT_OSX_ISO_ONCD): client/$(CLIENT_OSX_ISO_NAME) mkdir -p `dirname $@` cp $< $@ If client/$(CLIENT_OSX_ISO_NAME) exists but the client needs to be rebuilt, the rebuild will happen, but make will conclude that no mkdir/cp needs to be done. This is because the time stamp comparision happens before the rebuild. There's a better way do write: .PHONY: client-osx-iso client-osx-iso: client/$(CLIENT_OSX_ISO_NAME) client/$(CLIENT_OSX_ISO_NAME): FORCE cbrun osx64 $(MAKE) -C client $(CLIENT_OSX_ISO_NAME) $(CLIENT_OSX_ISO_ONCD): client/$(CLIENT_OSX_ISO_NAME) mkdir -p `dirname $@` cp $< $@ Besides working correctly, it is easier to read.
Seems to trigger properly now.