Understanding Makefile
Recently, I have been looking at some content related to network programming, where the project directory and the contents of the <span>makefile</span> are as follows:

server:
g++ server.cpp -o server && g++ client.cpp -o client
Since I did not understand the meaning of this, I was wondering why the <span>server</span> is needed.
I tried it myself, and if there is no <span>server:</span>, it will throw an error.

I was also thinking, isn’t it necessary to compile two files? Why is there only one <span>server:</span>?
With these questions, once you get the answers, you can better understand.
In the <span>Makefile</span>, <span>server:</span> is a target that instructs the <span>make</span> tool to execute certain commands. The <span>Makefile</span> file controls the build process by defining targets and corresponding rules.
1. Target:
<span>server:</span> is a target name. In a <span>Makefile</span>, targets are usually the files you want to generate or the operations you want to perform. For example, a target can be an executable file generated from compilation or a specific task. Here, the <span>server</span> target typically represents the executable file you want to compile and generate named <span>server</span>.
2. Rule:
The command under <span>server:</span> <span>g++ server.cpp -o server && g++ client.cpp -o client</span> is the rule for building that target. Specifically:
<span>g++ server.cpp -o server</span>compiles the<span>server.cpp</span>file and generates the<span>server</span>executable file.<span>&&</span>is a logical AND operator, indicating that the subsequent command will only execute if the preceding command is successful.<span>g++ client.cpp -o client</span>compiles the<span>client.cpp</span>file and generates the<span>client</span>executable file.
Why is <span>server:</span> needed?
<span>server:</span> as a target can be executed as follows:
make server
This will trigger the <span>make</span> to execute the rules related to <span>server:</span>, which means compiling <span>server.cpp</span> and <span>client.cpp</span>.
You can think of it as a label that tells the <span>make</span> what commands need to be executed to generate the <span>server</span> target. If you do not have the <span>server:</span> target, <span>make</span> will not know how to handle the build process for <span>server</span>.
Summary:
<span>server:</span>is the target name.- The commands defined under it are the operations required to generate the
<span>server</span>target. - Using
<span>make server</span>will execute the build commands according to the rules under<span>server:</span>.
Extension:
You can also define multiple targets. For example:
server:
g++ server.cpp -o server
client:
g++ client.cpp -o client
Then you can run them separately:
make server # Build server
make client # Build client
If you run <span>make</span> without specifying a target, <span>make</span> will default to executing the first target in the <span>Makefile</span>.

As shown in the above image, if I write it separately and then directly run <span>make</span>, it will only execute the first command, generating the <span>server executable file</span>. Then it will end, and if I need to run the second command, I will need to use the <span>make client</span> command.
Now, I believe everyone should be able to understand.