cmake相当于autoconf AC_ARG_WITH

时间:2015-12-24 04:51:53

标签: cmake autotools

autoconf的AC_ARG_WITH的cmake等价物是什么?在autoconf中,我可以使用AC_ARG_WITH来创建一个'--with-'命令行参数来配置,它允许我将路径传递给SDK,在该路径下是头和库。我如何在cmake中做同样的事情?我应该从env var读取路径吗?

1 个答案:

答案 0 :(得分:1)

cmake可执行文件接受变量'命令行中的定义,格式为

-D<var_name>[:<TYPE>]=<value>

cmake documentation注明了:[<TYPE>]部分,但可以省略。

此类变量会自动添加到CMake缓存中,并可由项目的cmake脚本使用。

对于3d-party项目的安装路径,常见的习语是:

<强>的CMakeLists.txt

find_library(SDK_LIB sdk PATHS ${SDK_DIR} PATH_SUFFIXES lib)
find_path(SDK_INCLUDE_DIR sdk.h PATHS ${SDK_DIR} PATH_SUFFIXES include)

如果设置了SDK_DIR变量,则其值(带有适当的后缀)将用于搜索SDK库(SDK_LIB)并包含目录(SDK_INCLUDE_DIR)。

如果未设置变量,或者基于它的值搜索失败,则搜索将在其他地方继续,包括系统默认值。

实际上,在CMake中调整包的路径比在自动工具中提供AC_ARG_WITH的路径灵活得多。例如,可以使用CMAKE_PREFIX_PATH变量传递所有 3d-party软件包的公共根,或使用{{传递所有库的公共根。 1}}。有关详细信息,请参阅find_library和其他CMAKE_LIBRARY_PATH命令的文档。

许多3d-party软件包提供find_*和/或Find<name>.cmake脚本,因此只需使用find_package命令即可​​搜索它们。这些脚本(以及<name>Config.cmake本身)提供了调整搜索路径的方法,因此您的软件包无需根据路径进行调整