【发布时间】:2016-07-24 17:24:35
【问题描述】:
我的CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project (foo)
include(FeatureSummary)
find_package(OpenSSL REQUIRED)
find_package(PkgConfig QUIET)
pkg_check_modules(JSON REQUIRED json-c)
feature_summary(WHAT ALL)
运行cmake . 给了我:
-- The following REQUIRED packages have been found:
* OpenSSL
谁能解释使FeatureSummary 也包含pkg_check_modules 找到的包的技巧?
更新
如果我使用以下代码创建一个名为 FindJSON.cmake 的文件:
find_package(PkgConfig QUIET)
# --> Still using pkg_check_modules
pkg_check_modules(JSON REQUIRED QUIET json-c)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
JSON
DEFAULT_MSG
JSON_LIBRARIES
JSON_INCLUDE_DIRS)
并将CMakeLists.txt 更改为:
cmake_minimum_required(VERSION 2.8)
project (foo)
include(FeatureSummary)
find_package(OpenSSL REQUIRED)
set(CMAKE_MODULE_PATH . ${CMAKE_MODULE_PATH})
# --> Now using find_package which still uses pkg_check_modules
find_package(JSON REQUIRED)
feature_summary(WHAT ALL)
我明白了:
-- The following REQUIRED packages have been found:
* OpenSSL
* JSON
没关系。发生了什么变化?
我使用find_package_handle_standard_args。好吧,我把FindJSON.cmake的内容复制到CMakeLists.txt,而不是通过find_package使用。
新的CMakeLists.txt 将如下所示:
cmake_minimum_required(VERSION 2.8)
project (foo)
include(FeatureSummary)
find_package(OpenSSL REQUIRED)
# --> The code from from FindJSON.cmake
find_package(PkgConfig QUIET)
# --> Still using pkg_check_modules
pkg_check_modules(JSON REQUIRED QUIET json-c)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
JSON
DEFAULT_MSG
JSON_LIBRARIES
JSON_INCLUDE_DIRS)
# <-- end of code from FindJSON.cmake
feature_summary(WHAT ALL)
和输出:
-- The following REQUIRED packages have been found:
* OpenSSL
JSON又消失了。
所以find_package 做了一些我不知道的魔法。
【问题讨论】:
标签: cmake pkg-config