В настоящее время я пытаюсь настроить систему сборки на основе CMake для моей небольшой библиотеки Си.Так как эта библиотека зависит от libacl
, CMake должен проверить, присутствует ли она в системе или нет, если нет.
Поскольку предопределенного модуля FindACL
нет, я использовал модуль из KDE.проект :
[...] check_include_files [...] find_library [...]
if (ACL_HEADERS_FOUND AND ACL_LIBS AND ATTR_LIBS)
set(ACL_FOUND TRUE)
set(ACL_LIBS ${ACL_LIBS} ${ATTR_LIBS})
message(STATUS "Found ACL support: ${ACL_LIBS}")
endif (ACL_HEADERS_FOUND AND ACL_LIBS AND ATTR_LIBS)
Я называю это с помощью следующего (минимального) CMakeLists.txt
:
cmake_minimum_required(VERSION 3.12)
project(
cmaketest
VERSION 1.0
DESCRIPTION "cmake test"
LANGUAGES C
)
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
find_package(ACL REQUIRED) # ACL_LIBS
Он правильно определяет, что моей системе не хватает включений libacl
,но не останавливает обработку, даже если в руководстве указано, что
Параметр REQUIRED прекращает обработку с сообщением об ошибке, если пакет не может быть найден.
Нужно ли явно проверять, установлено ли ACL_FOUND
, с помощью оператора if
?
Я использую CMake 3.13.4.Терминальный выход:
-- The C compiler identification is GNU 8.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Looking for include file attr/libattr.h
-- Looking for include file attr/libattr.h - not found
-- Looking for include file sys/xattr.h
-- Looking for include file sys/xattr.h - found
-- Looking for include file sys/acl.h
-- Looking for include file sys/acl.h - not found
-- Looking for include file acl/libacl.h
-- Looking for include file acl/libacl.h - not found
-- Configuring done
-- Generating done
-- Build files have been written to: [redacted]/build