If you're willing to sacrifice some portability, Makefiles and GCC can actually handle a good load of dependency stuff for you. For example, here's a Makefile I'm using for a small compiler I'm writing for a class right now:
Code:
CXXFLAGS=-g -O2 -Wall -Wextra -Wno-sign-compare -MD -I. -Isrc/
SRCS = $(wildcard src/*.cpp) $(wildcard src/boost/program_options/src/*.cpp)
OBJS = $(SRCS:%.cpp=%.o)
DEPS = $(SRCS:%.cpp=%.d)
BIN = evilc
all: $(BIN)
$(BIN): $(OBJS)
$(CXX) $(LDFLAGS) -o $@ $^
clean:
rm -f $(DEPS) $(OBJS) core
.SECONDARY: $(OBJS)
-include $(DEPS)
The key to this working is the -MD flag to gcc and the include directive. The include directive is a GNU make extension, so you lose some portability. I'd recommend reading the GNU make manual, it's chock full of interesting little tricks you can use to write good Makefiles easier.
If you have requirements beyond what make can offer to you easily, I personally like CMake. There are lots of other options available like scons or even (blech!) autotools, YMMV.
As for an IDE, there's a sticky with lots of suggestions. I've heard good things about Eclipse CDT, though I've never used it myself.