I'm getting into CMAKE usage with C and actually I'm creating two very small static libraries.
My goal is:
- The libraries are compiled and linked into *.a files. [THIS WORKS]
- Then I wish to copy that *.a files into /usr/local/lib [THIS ALSO WORKS]
- As far as I know about libraries (very little), they are linked using
-lnameoflib
, which is a compiler flag. OK. I have prepared my CMakeLists.txt and it actually copies *.a files into /usr/local/lib. However, to be able to use them in a program, I also need to copy their header files into /usr/include, then I can include them the easy way#include <mylibheader.h>
. That's how I understand it now.
And my question is - how is the proper way of copying header files into /usr/include folder with CMAKE? I would like it to copy them automatically when make install
is executed, like *.a files are.
For both of the libraries I have a smiliar CMakeLists.txt:
project(programming-network)
add_library(programming-network STATIC
send_string.c
recv_line.c
)
INSTALL(TARGETS programming-network
DESTINATION "lib"
)
A better way for newest cmake version is to use target's
PUBLIC_HEADER
properties.Some ref:
PUBLIC_HEADER
CMake install command
I don't think your solution is the correct one.
/usr/include
should be reserved for your vendor to put files in.The proper thing to do IMO is to install the header in
/usr/local/include
and then instruct the user toexport CPATH="/usr/local/include:${CPATH}"
.It seems
/usr/local/lib
was search automatically but if you wish to use another direxport LIBRARY_PATH="/usr/local/lib:${LIBRARY_PATH}"
works similar for the .a binary (but may or may not work good for shared libraries depending on your os).Optionally, but more cumbersome is to add
-I /usr/local/include
and-L /usr/local/lib
while compiling.This is a somewhat subjective answer, but it's been working well for me.
In a much better way, will copy all files that match the pattern and will preserve the directory structure.