Bolehkah Anda Menyusun dan Memautkan Berbilang Fail .cpp Dengan Cekap?
Persoalan berpusat di sekitar membuat Makefile yang menyusun berbilang fail .cpp dalam direktori sumber yang ditentukan (src/), mengubahnya menjadi fail .o yang sepadan dalam direktori objek berasingan (obj/), dan akhirnya memautkan fail .o yang terhasil ke dalam binari boleh laku dalam direktori akar projek (./).
Pelaksanaan Makefile
Untuk mencapai ini dalam Makefile, anda boleh mentakrifkan pembolehubah dan peraturan berikut:
SRC_DIR = src/ OBJ_DIR = obj/ SRC_FILES = $(wildcard $(SRC_DIR)/*.cpp) OBJ_FILES = $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRC_FILES)) LDFLAGS = ... # Linker flags CPPFLAGS = ... # Preprocessor flags CXXFLAGS = ... # Compiler flags main.exe: $(OBJ_FILES) g++ $(LDFLAGS) -o $@ $^ $(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp g++ $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<
Makefile ini akan menjana senarai .cpp fail dalam direktori src/ dan simpan dalam pembolehubah SRC_FILES. Ia kemudiannya akan mengubah senarai ini menjadi senarai fail .o yang sepadan dalam direktori obj/, yang akan disimpan dalam pembolehubah OBJ_FILES.
Pengkompil g akan digunakan untuk menyusun setiap fail .cpp ke dalam fail yang sepadan. fail .o dan pemaut g akan digunakan untuk memautkan semua fail .o bersama-sama untuk mencipta binari boleh laku terakhir, main.exe.
Amalan Baik lwn. Pendekatan Standard
Walaupun pendekatan ini berfungsi untuk menyusun dan memautkan berbilang fail .cpp, perlu diingat bahawa terdapat cara yang lebih standard dan cekap untuk mencapai matlamat yang sama.
Salah satu pendekatan sedemikian melibatkan penggunaan sistem binaan seperti CMake atau Bazel. Sistem ini menyediakan set alat dan ciri yang lebih komprehensif untuk mengurus proses penyusunan dan pemautan, termasuk pengiraan pergantungan automatik dan sokongan merentas platform.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Makefile untuk Menyusun dan Memautkan Berbilang Fail .cpp dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!