1. ignore them, of course
2. give them a job
3. give them money
4. give them food
1 is awful, 2 is infeasible, you can't magically find a productive job for everyone, 3 and 4 both seem fine to me. Would you have them all buying food in stores instead? That seems like it'll take more money to get the same amount of people fed.
What would you prefer?
The only downsides I can see are (1) a soup kitchen may become a place for social networks to be established, which is also a benefit for those helped, and (2) the food-to-money ratio may be greater if a soup kitchen can buy the food in bulk (though then one might think about setting up systems where poor people can buy-in-bulk together).
As for 2, this option is actually feasible and the best of all four you have listed. It may not be possible to find a job of the same productivity as the average currently employed person, but you don't have to. As long as the productivity is positive (no matter how small), you get a benefit to society. And, obviously, the benefit to those you help by giving them a job is many orders of magnitudes higher than if you just gave them money, let alone just giving them food.
Ideally it would be a combination of money and food.
As a case in point, Norway's social safety net provides a living wage to anyone who can't provide for themselves. This involves a lot of drug users. They do end up spending some of the money on drugs, but at least they don't starve or freeze to death. I think this is a tradeoff that's worth it. You both save the effort of micromanaging and provide some dignity to people who have too little of it. If someone wants to be self-destructive, they will be regardless of the circumstances.
But how can you solve it? That's a huge problem!
In engineering, and particularly with software, we seek to answer the small questions until we build a robust system.