【问题标题】:How can I convert a configure script to a CMakeLists file?如何将配置脚本转换为 CMakeLists 文件?
【发布时间】:2020-07-18 22:36:09
【问题描述】:

我想在我的 cmake 项目中使用this library,但是它带有一个configure 文件而不是CMakeLists.txt

#! /bin/sh
# waf configure wrapper
# based on http://code.google.com/p/waf/source/browse/configure

CUR_DIR=$PWD

#possible relative path
WORKINGDIR=`dirname $0`
cd $WORKINGDIR
#abs path
WORKINGDIR=`pwd`
cd $CUR_DIR
WAF=$WORKINGDIR/tools/waf

# Generates a Makefile. Requires that $WAF is set.
#
generateMakefile()
{
    cat > Makefile << EOF
#!/usr/bin/make -f
# Waf Makefile wrapper
WAF_HOME=$CUR_DIR

all:
    @$WAF build

all-debug:
    @$WAF -v build

all-progress:
    @$WAF -p build

install:
    $WAF install --yes;

uninstall:
    $WAF uninstall

clean:
    @$WAF clean

distclean:
    @$WAF distclean
    @-rm -rf build
    @-rm -f Makefile

check:
    @$WAF check

dist:
    @$WAF dist

.PHONY: clean dist distclean check uninstall install all

EOF
}

generateMakefile

"${WAF}" configure $*
exit $?

是否有用于转换的自动化工具? CMake 是否支持使用配置文件?是否有转换的经验法则 - 即将 ... 替换为 add_library

【问题讨论】:

    标签: c++ makefile cmake configure


    【解决方案1】:

    您无需将上游库转换为 cmake 即可在 cmake 项目中使用它。只要您能够安装和/或链接到该库,您就可以配置您的 cmake 项目以使用它。

    使用 cmake 使用第三方库的常见模式是使用 cmake 的 find_package() 函数,通过提供您自己的专用 cmake 模块文件来查找和配置库。

    说,您希望加载 libfoo。 Here are the steps:

    • 在您的项目树中创建一个目录来存储您的自定义 cmake 模块(例如,./cmake/modules

    • 在该目录中创建一个名为 FindFoo.cmake 的文本文件。

    • FindFoo.cmake 内添加检查以确定系统中是否实际存在 foo。如果是则设置相关变量。否则,抛出错误。理想的做法是为该库创建一个构建目标,您可以简单地将其作为依赖项添加到其他 cmake 目标。

    • 通过添加 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/") 来配置您的 cmake 项目以使用您的本地模块,

    • 最后,通过调用 find_package(Foo REQUIRED) 配置您的 cmake 项目以包含您的 Foo 库。

    【讨论】:

    • cmake 将如何导入库(设置为模块)?它是否使用配置脚本编译它?
    • @TobiAkinyemi 这种方法仅涵盖将预先存在的第三方库导入 cmake 项目。使用这种方法,您可以检查库是否存在,并定义您需要导入和链接到库的所有 cmake 变量。
    【解决方案2】:

    进行转换的方法是阅读配置脚本并了解它的作用以及如何/为什么。然后写一个CMakeLists.txt文件,实现同样的效果。

    没有捷径。

    【讨论】:

    • 尝试使用configure/make构建一个静态库,然后用cmake链接到它会更好吗?我不知道 configure/make 是如何工作的——据我所知,这不值得学习
    • @TobiAkinyemi 这当然是另一种选择。
    猜你喜欢
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 2010-10-06
    • 1970-01-01
    • 2013-04-13
    • 2016-04-28
    • 2015-08-27
    相关资源
    最近更新 更多