如何从Azure Iot SDK C示例修复此cmake错误?

问题描述

我正在尝试从Azure IoT(https://github.com/Azure/azure-iot-sdk-c.git)构建iotedge_downstream_device_sample示例。我已按照https://github.com/Azure/azure-iot-sdk-c/blob/master/doc/devbox_setup.md#linux中概述的步骤进行操作。

将cmake_minimum_required(VERSION 3.10)添加到azure-iot-sdk-c / iothub_client / samples / iotedge_downstream_device_sample / CMakeLists.txt的第三行后,我运行“ cmake”,得到以下错误。

CMakeLists.txt中的

CMake错误:5(如果): 如果给定参数: “不”“与”“不”“与”“不”“开” 指定了未知参数

-配置不完整,发生了错误!

我的CMakeLists.txt文件的第5-7行是: 如果(不是$ {use_mqtt}而不是$ {use_amqp}而不是$ {use_http}) 消息(FATAL_ERROR“在没有协议支持的情况下生成iotedge_downstream_device_sample”) endif()

我对错误消息感到困惑。是否未定义“ use_mqtt” /“ use_amqp” /“ use_http”的问题?我希望有人提到它,而不是“ NOT” /“ AND” /“ ON”一词。我尝试添加以下行以使用http和mqtt / amqp启用它们,但它没有任何效果: 选项(use_http“如果要使用http则将use_http设置为ON,将OFF设置为不使用http” ON) 选项(use_mqtt“如果要使用mqtt,则将use_mqtt设置为ON;如果不使用mqtt,则将其设置为OFF”;) 选项(use_http“如果要使用amqp,则将use_amqp设置为ON;如果不使用amqp,则设置为OFF”;)

我不太了解cmake。

为完整起见,这是我的整个CMakeLists.txt文件: #版权(c)Microsoft。版权所有。 #根据MIT许可获得许可。有关完整的许可证信息,请参见项目根目录中的LICENSE文件。 cmake_minimum_required(版本3.10)

如果(不是$ {use_mqtt}而不是$ {use_amqp}而不是$ {use_http}) 消息(FATAL_ERROR“在没有协议支持的情况下生成iotedge_downstream_device_sample”) endif()

compileAsC99()

set(iotedge_downstream_c_files iotedge_downstream_device_sample.c )

IF(WIN32) #windows需要此定义 add_definitions(-D_CRT_SECURE_NO_WARNINGS) ENDIF(WIN32)

include_directories(。)

add_executable(iotedge_downstream_device_sample $ {iotedge_downstream_c_files}) if($ {build_as_dynamic}) target_link_libraries(iotedge_downstream_device_sample iothub_client_dll) 其他() target_link_libraries(iotedge_downstream_device_sample iothub_client)

if(${use_http})
    target_link_libraries(iotedge_downstream_device_sample iothub_client_http_transport)
    add_definitions(-DUSE_HTTP)
endif()

if(${use_amqp})
    target_link_libraries(iotedge_downstream_device_sample iothub_client_amqp_transport iothub_client_amqp_ws_transport)
    linkUAMQP(iotedge_downstream_device_sample)
    add_definitions(-DUSE_AMQP)
endif()

if(${use_mqtt})
    target_link_libraries(iotedge_downstream_device_sample iothub_client_mqtt_transport iothub_client_mqtt_ws_transport)
    linkMqttLibrary(iotedge_downstream_device_sample)
    add_definitions(-DUSE_MQTT)
endif()

endif()

解决方法

按照@Tsyvarev

“内部CMakeLists.txt并非独立。您可以通过缺少cmake_minimum_required行来轻松地发现这一点。您需要使用顶级CMakeLists.txt来构建库和示例。”

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...