autoconf的AC_ARG_WITH的cmake等价物是什么?在autoconf中,我可以使用AC_ARG_WITH来创建一个'--with-'命令行参数来配置,它允许我将路径传递给SDK,在该路径下是头和库。我如何在cmake中做同样的事情?我应该从env var读取路径吗?
答案 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
本身)提供了调整搜索路径的方法,因此您的软件包无需根据路径进行调整。