"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > How to Compile and Link Multiple .cpp Files into a Single Binary?

How to Compile and Link Multiple .cpp Files into a Single Binary?

Published on 2024-11-11
Browse:356

How to Compile and Link Multiple .cpp Files into a Single Binary?

How to Compile and Link Multiple .cpp Files into a Binary

This article aims to address the question of compiling multiple .cpp files into .o objects and linking them into a single binary.

Makefile Configuration

To accomplish this, a Makefile can be utilized with the following contents:

SRC_DIR = ./src
OBJ_DIR = ./obj
SRC_FILES = $(wildcard $(SRC_DIR)/*.cpp)
OBJ_FILES = $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRC_FILES))

main.exe: $(OBJ_FILES)
    g   $(LDFLAGS) -o $@ $^

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
    g   $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<

Explanation:

  • SRC_DIR: Specifies the directory containing the source .cpp files.
  • OBJ_DIR: Indicates the directory where the .o objects will be created.
  • SRC_FILES: A list of all .cpp files in the SRC_DIR.
  • OBJ_FILES: A list of all .o objects that will be generated.
  • main.exe: The name of the final binary.
  • LDFLAGS: Linker flags.
  • CPPFLAGS: C preprocessor flags.
  • CXXFLAGS: C compiler flags.

Dependency Graph Generation

To automatically generate dependencies between source and object files, add the following to the Makefile:

CXXFLAGS  = -MMD
-include $(OBJ_FILES:.o=.d)

Best Practices

This approach is commonly used for compiling and linking multiple C files. However, it's essential to refer to the GNU Make Manual for additional guidance and advanced options.

Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3