by Angel Leon. March 17, 2015.
On the compilation phase, you will usually need to specify the different include paths so that the interfaces (.h, .hpp) which define structs, classes, constans, and functions can be found.
With gcc and llvm include paths are passed with -I/path/to/includes, you can pass as many -I as you need.
In Windows, cl.exe takes include paths with the following syntax:
/I"c:\path\to\includes\ you can also pass as many as you need.
Some software uses macro definition variables that should be passed during compile time to decide what code to include.
These compilation-time variables are passed using -D,
e.g. -DMYSOFTWARE_COMPILATION_VARIABLE -DDO_SOMETHING=1 DDISABLE_DEPRECATED_FUNCTIONS=0
These compilation time flags are by convention usually put into a single variable named CXXFLAGS, which is then passed to the compiler as a parameter for convenience when you're building your compilation/make script.
When you compile your .c, or .cpp files, you will end up with object files.
These files usually have .o extensions in Linux, in Windows they might be under .obj extensions.
You can create an .o file for a single or for many source files.
When you have several .o files, you can put them together as a library, a static library. In Linux/Mac these static libraries are simply archive files, or .a files. In windows, static library files exist under the .lib extension.
They are created like this in Linux/Mac:
ar -cvq libctest.a ctest1.o ctest2.o ctest3.o
libctest.a will contain ctest1.o,ctest2.o and ctest2.o
They are created like this in Windows:
LIB.EXE /OUT:MYLIB.LIB FILE1.OBJ FILE2.OBJ FILE3.OBJ
The cool thing about .a libraries is that they're self contained, the problem is that you end up using more space to distribute them, and perhaps, some of the libraries that are inside the .a file.