提问者:小点点

如何将configure脚本转换为CMakeLists文件?


我希望在我的cmake项目中使用这个库,但是它附带了一个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是否允许使用configure文件? 是否有转换的经验法则--即用add_library替换...


共2个答案

匿名用户

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

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

比如说,您希望加载libfoo。 以下是步骤:

>

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

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

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

    通过添加set(CMAKE_MODULE_PATH${CMAKE_MODULE_PATH}“${CMAKE_SOURCE_DIR}/cmake/modules/”)

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

  • 匿名用户

    进行转换的方法是阅读configure脚本并了解它的作用以及如何/为什么。 然后编写一个cmakelists.txt文件来实现相同的功能。

    没有捷径可走。