mirror of
https://github.com/TrudeEH/web.git
synced 2025-12-06 08:23:37 +00:00
[BREAKING] Simplify URL paths
This commit is contained in:
79
content/notes/compiling.md
Normal file
79
content/notes/compiling.md
Normal file
@@ -0,0 +1,79 @@
|
||||
---
|
||||
title: Compiling [MAKE / GCC]
|
||||
description:
|
||||
draft: false
|
||||
tags:
|
||||
- c
|
||||
- programming
|
||||
author: TrudeEH
|
||||
showToc: true
|
||||
---
|
||||
|
||||
|
||||
A compiler converts `C` code into machine code in 4 steps:
|
||||
1. **Preprocessing** (Convert all preprocessor instructions (`#…`) to C code.)
|
||||
2. **Compiling** (Convert `C` code to assembly.)
|
||||
3. **Assembling** (Compile the necessary libraries.)
|
||||
4. **Linking** (Merge the compiled code with the compiled libraries.)
|
||||
|
||||
## Libraries
|
||||
|
||||
Libraries are pre-written collections of code that can be reused in other programs. On *UNIX* systems, they are usually located in the `/lib/` and `/usr/include` directories.
|
||||
|
||||
### Math.h
|
||||
|
||||
For example, `math.h` is very useful to implement complex arithmetic operations.
|
||||
|
||||
```C
|
||||
#include <math.h>
|
||||
double A = sqrt(9);
|
||||
double B = pow(2, 4);
|
||||
int C = round(3.14);
|
||||
int D = ceil(3.14);
|
||||
int E = floor(3.99);
|
||||
double F = fabs(-100);
|
||||
double G = log(3);
|
||||
double H = sin(45);
|
||||
double I = cos(45);
|
||||
double J = tan(45);
|
||||
```
|
||||
|
||||
### Using Libraries
|
||||
|
||||
To use a library, we first have to include it in the `C` code.
|
||||
|
||||
```C
|
||||
#include <cs50.h> // cs50.h library will be included.
|
||||
```
|
||||
|
||||
Then, the library must be linked at compile time (unless it is part of the C standard).
|
||||
|
||||
```Shell
|
||||
gcc -o hello hello.c -lcs50
|
||||
./hello
|
||||
```
|
||||
|
||||
## Optimization Flags
|
||||
|
||||
- `-O2` Optimize for speed
|
||||
- `-O3` Optimize for speed aggressively
|
||||
- `-Os` Optimize for size
|
||||
- `-Og` Optimize for debugging
|
||||
- `-Oz` Optimize for size aggressively
|
||||
|
||||
## Make
|
||||
|
||||
`Make` Is a build automation tool that automates the process of compiling, linking and building executables.
|
||||
An example `Makefile` could look like the following:
|
||||
|
||||
```Makefile
|
||||
hello:
|
||||
gcc -o hello hello.c -lcs50
|
||||
clean:
|
||||
rm -f hello
|
||||
```
|
||||
|
||||
```Shell
|
||||
make # Compiles hello.c
|
||||
make clean # Removes the executable (hello) generated by the make command.
|
||||
```
|
||||
Reference in New Issue
Block a user