我开始用C来使用CMAKE,实际上我正在创建两个非常小的静态库.

我的目标是:

  1. 这些库被编译并链接到*.a档案.[这个
  2. 那么我想复制一下.a将文件保存到/usr/local/lib中[这也适用]
  3. 据我所知(很少),它们是使用-lnameoflib链接的,这是一个编译器标志.好的.我已经准备好CMakeLists.txt,它实际上将*.a文件复制到/usr/local/lib中.但是,为了能够在程序中使用它们,我还需要将它们的头文件复制到/usr/local/include中,然后我可以通过简单的方式将它们包含在#include <mylibheader.h>中.我现在就是这么理解的.

我的问题是——如何用CMAKE将头文件复制到/usr/include文件夹中?我希望它在执行make install时自动复制它们,比如*.一个文件是.

对于这两个库,我都有一个笑脸CMakeLists.txt:

project(programming-network)

add_library(programming-network STATIC
    send_string.c
    recv_line.c
    )

INSTALL(TARGETS programming-network
        DESTINATION "lib"
        )

推荐答案

对于最新的cmake版本,更好的方法是使用target的PUBLIC_HEADER个属性.

project(myproject)

add_library(mylib some.c another.c)
set_target_properties(mylib PROPERTIES PUBLIC_HEADER "some.h;another.h")
INSTALL(TARGETS mylib 
        LIBRARY DESTINATION some/libpath
        PUBLIC_HEADER DESTINATION some/includepath
)

一些参考:

PUBLIC_HEADER

CMake install command

C++相关问答推荐

如何从C中的公钥字符串创建EVP_PKEY

数组元素的编号索引

如何将匿名VLA分配给指针?

C指针地址和转换

sizeof结果是否依赖于字符串的声明?

为什么在C中设置文件的位置并写入文件,填充空字符?

在C语言中使用scanf()时我无法理解的警告

返回一个包含数组的 struct

为什么在C中进行大量的位移位?

为什么GCC在每次循环迭代时都会生成一个数组的mov&S使用[]访问数组?(-03,x86)

Char变量如何在不使用方括号或花括号的情况下存储字符串,以及它如何迭代到下一个字符?

如何在STM8项目中导入STM8S/A标准外设库(ST VisualDeveloper)?

如何编写一个for循环来计算C中各项的总和?

接受任何参数的函数指针是否与接受不同参数的函数兼容

pthread_create的用法

*S=0;正在优化中.可能是GCC 13号虫?或者是一些不明确的行为?

为什么二进制文件的大小不会随着静态数据的大小而增加?

使用邻接表创建图

子进程不会修改父进程中的统计信息

与 C 相比,C++ 中无副作用的无限循环的好处是 UB?