You can certainly do this. (You can do a lot of things.)
Here is the thing to keep in mind: if you want to minimize the cMAPE (maybe your bonus depends on getting a cMAPE below a certain number?), you will almost certainly want to give a forecast that is different than if you want to minimize the MSE or the MAE. (The MSE-minimizing forecast is usually also different from the MAE-minimizing one.)
For instance, assume the true demand is Poisson distributed with parameter 0.5. What is the "best" forecast? If by "best" you mean that the expected MSE is minimized, you want to forecast the expected demand, 0.5. If you want to minimize the expected MAE, you want to forecast median demand, which is 0. If you want to minimize the expected cMAPE, you want to forecast 1.

Thus, you can certainly optimize your models so their point forecasts minimizes the MAE or MSE. How do you go from a model to a point forecast? Per above, you need to decide which functional of the predictive density you want to extract. And you can then report cMAPE. However, if you are tasked to reduce the cMAPE, one lever is to extract a different functional than the one you used in minimizing the MSE or MAE.
Taking a step back, I would very much recommend that you tailor your error measure to the functional you want to elicit - not the other way around, as above. How useful in a business sense is it to elicit a point forecast of 1 for a Poisson density with expectation of 0.5? I have never seen a business process that would be optimally controlled through MAPE-optimal forecasts, and I strongly suspect that the cMAPE is no better. Conversely, there are processes that are optimally controlled by unbiased expectation forecasts (which are elicited using the MSE), and others that require quantile forecasts (which you elicit using a pinball loss). For instance, if you want to set safety amounts, you need a quantile forecast for that.
You may be interested in What are the shortcomings of the Mean Absolute Percentage Error (MAPE)? and this paper.
R code for the plot above:
sims <- rpois(10000,0.5)
candidates <- seq(min(sims),max(sims),by=0.01)
mses <- sapply(candidates,function(xx)mean((sims-xx)^2))
maes <- sapply(candidates,function(xx)mean(abs(sims-xx)))
cmapes <- sapply(candidates,function(xx)mean(abs(sims-xx)/pmax(sims,xx)))
opar <- par(mfrow=c(1,3),las=1)
plot(candidates,mses,type="l",ylab="",main="Expected MSE")
plot(candidates,maes,type="l",ylab="",main="Expected MAE")
plot(candidates,cmapes,type="l",ylab="",main="Expected cMAPE")
par(opar)