Contents
C/C++ backends
āϏāĻŋ āĻŦāĻž āϏāĻŋ++ āĻāϰ āĻāύā§āϝ āĻ āύā§āĻ āĻā§āϞāĻŋ āĻŦā§āϝāĻžāĻāĻāύā§āĻĄ āĻāĻā§ āϝā§āĻŽāύ gcc, clang, tcc etc. āĻāĻā§āϞā§āϰ āĻŽāĻĻā§āϧ⧠gcc āϏāĻŦāĻā§ā§ā§ āĻŦā§āĻļāĻŋ āĻĒā§āϰāĻāϞāĻŋāϤ āĨ¤
Variants of GCC
gcc āĻāϰāĻ āĻ āύā§āĻ āĻā§āϞ⧠āĻ āĻĒāĻļāύ āĻĒāĻžāĻā§āĻž āϝāĻžā§ āĨ¤ gcc, āĻŽā§āϞāϤ GNU gcc āύāĻžāĻŽā§ āĻĒāϰāĻŋāĻāĻŋāϤ, āϝāĻžāϰ āĻĒā§āϰā§āĻŖā§āύāĻžāĻŽ āĻšāĻā§āĻā§ GNU Compiler Collection (GCC) āĨ¤ āϤ⧠āĻā§āύā§, gcc āĻāϰ āϏā§āĻāĻžāύā§āĻĄāĻžāϰā§āĻĄāĻžāĻāĻā§āĻļāύ āĻāϰ⧠āĻĨāĻžāĻā§ āĨ¤
Unix, BSD, Windows āĻāϤā§āϝāĻžāĻĻāĻŋāϰ āĻāύā§āϝ āĻā§āύ⧠āĻāĻŋāϏāĻŋāϏāĻŋāϰ āĻāĻ āĻŦāĻž āĻāĻāĻžāϧāĻŋāĻ āϏāĻžāĻŦāϏā§āĻ āĻŦāĻž āϏā§āĻĒāĻžāϰāϏā§āĻ āϧāϰāύā§āϰ āĻāĻŽāĻĒā§āϞāĻŋāĻŽā§āύā§āĻā§āĻļāύ āĻĒāĻžāĻā§āĻž āϝāĻžā§ āĨ¤ āϝā§āĻŽāύāĻ āĻāĻāύā§āĻĄā§āĻā§āϰ āĻāύā§āϝ āĻŽāĻŋāĻā§āĻāĻŋāĻĄāĻŦā§āϞāĻŋāĻ(mingw), TDMgcc āĻāϤā§āϝāĻžāĻĻāĻŋ āĨ¤ āϤāĻŦā§ mingw āĻ āϤā§āϝāĻžāϧāĻŋāĻ āĻāύāĻĒā§āϰāĻŋā§āĨ¤ MingW āϰ āĻŽāĻžāύ⧠āĻšāĻā§āĻā§ Minimalist gcc for Windows āĨ¤
Making a cross platform GCC app
āϝā§āĻŽāύāĻāĻŋ āĻāĻŽāϰāĻž āĻĻā§āĻāϞāĻžāĻŽ āϝ⧠āĻāĻŋāϏāĻŋāϏāĻŋ āĻā§āϰāϏ āĻāĻŽā§āĻĒāĻžāĻāϞā§āĻĄ āύā§āĨ¤ āĻāĻāĻž āĻĒā§āϰāϤāĻŋāĻāĻž āĻĒā§āϞāĻžāĻāĻĢāϰā§āĻŽā§āϰ āĻāύā§āϝ āĻāϞāĻžāĻĻāĻž āĻāϞāĻžāĻĻāĻž āĻāĻžāĻŦā§ āĻĒāĻžāĻā§āĻž āϝāĻžā§āĨ¤ āĻāĻŋāύā§āϤ⧠āĻāĻŽāϰāĻž āĻāĻžāĻāϞ⧠āĻā§ā§āĻž āϤāĻžāϞāĻŋ āĻĻāĻŋā§ā§ āĻāĻāĻāĻž āĻāĻĒā§āϞāĻŋāĻā§āĻļāύ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦ āϝā§āĻāĻž āĻā§āϰāϏāĻĒā§āϞā§āϝāĻžāĻāĻĢāϰā§āĻŽ āĻāĻŽā§āĻĒā§āϝāĻžāĻāĻŋāĻŦāϞāĨ¤
How is it possible
GCC āϰ āĻāĻŋāĻā§ āĻŽāĻĄāĻŋāĻĢāĻžāĻāĻĄ āĻĢā§āϞā§āĻāĻžāϰ āĻāĻā§ āϝā§āĻā§āϞ⧠āĻāĻāύāĻŋāĻā§āϏ āϏā§āĻāĻžāĻāϞ āĻāĻĒāĻŋā§āĻžāĻ āϏāĻžāĻĒā§āϰā§āĻ āĻāϰā§āĨ¤ āϝā§āĻŽāύāĻāĻāĻāύā§āĻĄā§āĻā§ unistd.h, netdb.h, sys/socket.h āĻāϤā§āϝāĻžāĻĻāĻŋ āĻšā§āĻĄāĻžāϰ āĻĢāĻžāĻāϞ āĻā§āϞ⧠āύā§āĻ āϝā§āĻā§āϞ⧠āϞāĻŋāύāĻžāĻā§āϏ⧠āĻĒāĻžāĻā§āĻž āϝāĻžā§āĨ¤ āĻāĻŦāĻžāϰ arpa/inet.h āϝā§āĻāĻž āĻŽā§āϝāĻžāĻā§ āĻĒāĻžāĻā§āĻž āϝāĻžā§ āϏā§āĻāĻžāĻ āĻŽāĻŋāϏāĻŋāĻāĨ¤ āĻŽā§āĻāĻāĻĨāĻž *nix system āĻāϰ āĻŽā§āϝāĻžāĻā§āϏāĻŋāĻŽāĻžāĻŽāĻ not available āĨ¤ āϤ⧠āĻā§āϰāϏāĻāĻŽā§āĻĒāĻžāĻāϞ āĻāϰāϤ⧠āĻšāϞ⧠āĻšā§ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āĻā§āϞā§āϰ āϏāĻŽāύā§āĻŦā§ āϏāĻžāϧāύ āĻāϰāϤ⧠āĻšāĻŦā§ āĻ āĻĨāĻŦāĻž āϏāĻŽāύā§āĻŦāĻŋāϤ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
Using Meta Programming
āĻĒā§āϰāĻŋāĻĒā§āϰāϏā§āϏāϰ āĻĻāĻŋā§ā§ āĻāĻŽāϰāĻž āϏāĻšāϝā§āĻ on demand āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āĻāύāĻā§āϞā§āĻĄ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤ āϝā§āĻŽāύāĻ
c
#ifdef __linux__#include<sys/socket.h>#elif _WIN32#include<winsock.h>#else#error "could not find"#endif
Using special gcc implementation
āĻāĻŦāĻžāϰ āϏā§āϧā§āĻŽāĻžāϤā§āϰ *nix āϏā§āĻāĻžāĻāϞ⧠āĻŦāĻž api āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĻ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻŋāĻā§ āϏā§āĻĒā§āĻļāĻžāϞ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϤāĻž āϏāĻžāϧāύ āĻāϰāĻž āϝāĻžā§āĨ¤ āϝā§āĻŽāύāĻ
- Msys2
- Cygwin
āĻāĻŋāύā§āϤ⧠āĻāĻĻā§āϰ āĻŽāĻžāĻā§āĻ āĻāĻŋāĻā§ āĻĒā§āϰā§āĻĢāĻžāϰā§āύā§āϏ āĻāĻā§āĨ¤
Msys2 vs Cygwin
Msys2 | Cygwin |
---|---|
Most used | Equally Famous |
Built on Cygwin | Independent |
Hard to work on | Easy to work on |
Has a decent pkg manager | Has some pkg management system |
Conclusion
āĻā§āϰāϏ āĻāĻŽā§āĻĒāĻžāĻāϞā§āĻļāύā§āϰ āĻāύā§āϝ meta programming āĻ āϏā§āϰāĻžāĨ¤ āϤāĻžāĻ āϝāĻĻāĻŋ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āϏāĻžāϧāύ āĻāϰāϤā§āĻ āĻšā§ āϏā§āĻ āϏā§āĻŦāĻŋāϧāĻž āϤāĻŦā§ āĻāĻŽāĻžāϰ āĻĒāĻā§āĻāύā§āĻĻ Cygwin āϝāĻĻāĻŋāĻ Cygwin āĻāϰ āĻāĻ āĻāϞāĻžāĻĻāĻž āϞā§āĻā§āϞā§āϰ āϝāύā§āϤā§āϰāύāĻž āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύāĨ¤
Cygwin āĻāϰ āĻāĻĒāϰ āĻļāĻŋāĻā§āϰāĻ āĻāϰā§āĻāĻŋāĻā§āϞ āϞāĻŋāĻāĻŦ āϤāĻŦā§ āĻāĻāϰā§āĻāĻŋāϤā§āĨ¤