我希望在我的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
替换...
?
您不需要将上游库转换为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文件来实现相同的功能。
没有捷径可走。