编译静态库时收集所有头文件

时间:2019-02-04 12:37:50

标签: c++ gcc cmake

我正在使用Cmake从源代码编译该库的静态版本。

源代码具有如下结构:

//serve static files
var serveIndex = require('serve-index');
app.use('/public/', serveIndex(path.join(__dirname, 'public')));
app.use('/public/', express.static(path.join(__dirname, 'public')));

以此类推...

编译库的静态版本并不困难。但是出于分发目的,我只想分发标头(src/ module1/ x.cpp x.h ... module2/ y.cpp y.h ... )和静态库(x.h, y.h, ...)。

GCC或CMAKE中是否有一些命令可以自动收集所有标头并将它们放在单独的文件夹中?

我知道我可以手动将源代码和标头分开,或者我可以简单地分发所有代码(源代码和标头),但这对于我的特定用例来说是浪费和不希望的。另外,我可以编写一个非常简单的Python脚本来执行此操作,但在我看来,这可能是一个很常见的场景。因此,我想在Gcc或Cmake中可以做些什么。

注意:我不负责维护代码库,因此我对项目的结构没有发言权。如果是的话,我可以将代码分成module1.a, module2.a, ...src文件夹。

1 个答案:

答案 0 :(得分:1)

最好的办法是使用cmake glob并安装所有工件。

# append to your existing CMakeLists.txt
install(TARGETS module1 module2 #adjust to use your names
        ARCHIVE DESTINATION lib)
file(GLOB_RECURSE header_list "*.h") #adjust if necessary
install(FILES ${header_list}
        DESTINATION include)

请注意,迁移并不完美,并且仅在运行cmake时才更新文件列表(即,它不会自行检测添加或删除的文件)。