使用 cmake 构建外部库

Posted

技术标签:

【中文标题】使用 cmake 构建外部库【英文标题】:Building external libraries with cmake 【发布时间】:2016-11-14 05:57:19 【问题描述】:

我正在使用 cmake 构建需要外部库的库。每个外部库都有自己的 makefile。当我从我的CMakeLists.txt 文件中调用这组命令时,什么都没有发生。

任何想法我做错了什么?

add_custom_target(blake
        COMMAND mkdir -p $LIBSCAPI_BUILDIR/blake
        && cp -r $LIBSCAPI_BUILDIR/lib/BLAKE2/sse/. $LIBSCAPI_BUILDIR/BLAKE2
        make -C $LIBSCAPI_BUILDIR/BLAKE2
        make -C $LIBSCAPI_BUILDIR/BLAKE2 BUILDDIR=$(builddir) install
        cp $LIBSCAPI_BUILDIR/BLAKE2/libblake2.a install/lib/
        touch compile-blake)

【问题讨论】:

【参考方案1】:

为了默认构建一个target,你需要在add_custom_target调用中添加ALL选项:

add_custom_target(blake ALL
    COMMAND ...
)

【讨论】:

当我添加 'ALL' 选项时,cmake 报错:'mkdir: invalid option -- 'r'' 所以,你的命令有问题。请注意,每个新命令都应在前面加上 COMMAND 关键字:与make 不同,CMake 不会自动将换行符视为新命令。 && 也可以替换为 COMMAND:所有命令都按顺序执行,如果其中任何一个命令失败,则构建将终止。您可以在add_custom_target documentation 找到更多信息。

以上是关于使用 cmake 构建外部库的主要内容,如果未能解决你的问题,请参考以下文章

使用外部附加头文件构建 cmake 对象库

如何构建使用 CMake FetchContent 下载的外部库?

使用 CMake 只构建一次外部库

注册。使用 CMake 将外部库链接到项目

CMake:如何构建外部项目并包含其目标

CMake 链接到外部库