This is my mother's recipe for home-made macaroni and cheese, told in her own wonderful way.
Melt about half a 'square' of butter or margarine -- that is, 1/8 of a pound or 1/2 cup, roughly. Don't let it scorch. You can sizzle up some minced onion in it at this stage too if you like and/or minced garlic clove or equivalent.
When it stops spitting and sizzling, quickly add the same amount roughly of flour. Mix with a whisk or a fork (whisk is easier). Lower the heat a little bit and allow to cook, stirring it about gently, for say 5 minutes. You want to get rid of the raw flour taste but you don't want it to brown. It will look quite dry.
Then add milk, from 1 cup to 2 cups depending on how runny you want your sauce. Stir like crazy while milk is being added. I try to put in enough to moisten the whole works in the first instalment, stir like mad; when the milk is absorbed, add about that much more, keep stirring and so on. You want to avoid LUMPS, which you can do by dedicated stirring. Adjust the heat if it's bubbling too fast.
When you've got all the milk in and you like the look of the consistency, add the (grated) cheese by handfuls. It is virtually impossible to add too much cheese at this point. Not less than 1/3 pound and 1/2 is nicer. You can mix up the kinds, cheddar is classic but mozza and jack and havarti etc. add interest. This is a good thing to do with tired "heels" of cheese in the fridge. A handful of Parmesan adds edge to the proceedings too. Stir sans cesse. It is good to have the cheese all grated before you get going, because you don't want to leave your sauce once you get started.
Seasonings! Test it; you may want to add some salt, depending on the saltiness of your cheeses. I always add a couple of generous sloshes of Worcestershire sauce, and likewise Tabasco is good.
When you're happy with the sauce, you can either pour it over the reserved macaronis or dump the macaronis into the sauce in the frying pan. Mix the two together gently; I like to finish it in a casserole of appropriate size, in a hot oven with crumbs or wheat germ or something crunchy on the top - a dash of paprika on top for colour is nice also. A bit of brown crust on top is nice.