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

如何从Azure Iot SDK C示例修复此cmake错误?,cmake,azure-iot-sdk,Cmake,Azure Iot Sdk,我正在尝试从Azure IoT()构建IoEdge_下游_设备_示例。我已遵循中概述的步骤 将cmake_minimum_required(3.10版)添加到azure-iot-sdk-c/iothub_client/samples/iotedge_downstream_device_sample/CMakeLists.txt的第三行后,我运行“cmake.”后,出现以下错误 CMakeLists.txt处的CMake错误:5(如果): 如果给定参数: “不”和“不”以及“不”在 指定了未知参数

我正在尝试从Azure IoT()构建IoEdge_下游_设备_示例。我已遵循中概述的步骤

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

CMakeLists.txt处的CMake错误:5(如果): 如果给定参数: “不”和“不”以及“不”在 指定了未知参数

--配置不完整,出现错误

我的CMakeLists.txt文件的第5-7行是: if(非${use_mqtt}和非${use_amqp}和非${use_http}) 消息(致命错误“iotedge\u下游\u设备\u样本在不支持协议的情况下生成”) endif()

我被错误信息弄糊涂了。是否未定义“使用\u mqtt”/“使用\u amqp”/“使用\u http”的问题?我本以为会提到这一点,而不是“不”/“和”/“开”。我尝试添加使用http和mqtt/amqp off打开的行,但没有效果: 选项(use_http“如果要使用http,请将use_http设置为ON,如果要使用http,请将其设置为OFF以不使用http”ON) 选项(如果要使用mqtt,请使用_-mqtt“将使用_-mqtt设置为ON,如果要使用mqtt,请设置为OFF以不使用mqtt“OFF”) 选项(如果要使用amqp,请使用http“将使用amqp设置为ON,如果要使用amqp,请设置为OFF以不使用amqp”OFF)

关于cmake,有一些基本的东西我不明白

为完整起见,以下是我的整个CMakeLists.txt文件: #版权所有(c)微软。版权所有。 #根据麻省理工学院许可证授权。有关完整的许可证信息,请参见项目根目录中的许可证文件。 cmake_最低要求(3.10版)

if(非${use_mqtt}和非${use_amqp}和非${use_http}) 消息(致命错误“iotedge\u下游\u设备\u样本在不支持协议的情况下生成”) endif()

compileAsC99()

设置(IoEdge_下游_c_文件) iotedge_下游_设备_样本c )

如果(WIN32) #windows需要这个定义 添加定义(-D\u CRT\u SECURE\u NO\u警告) ENDIF(WIN32)

包含目录(.)

添加_可执行文件(IoEdge_下游_设备_示例${IoEdge_下游_c_文件}) if(${build_as_dynamic}) 目标链接库(IoEdge下游设备示例IoTub客户端dll) else() 目标链接库(IoEdge下游设备样本IoHub客户端)


endif()

根据@Tsyvarev


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

内部的
CMakeLists.txt
不是独立的。您可以通过缺少
cmake_minimum_required
行轻松发现这一点。对于生成库和示例,您需要使用顶级的
CMakeLists.txt
。@Tsyvarev,谢谢。我现在明白了。因此,我在根目录下运行cmake,并在子目录中生成。谢谢你。我现在拿到了。@KK很高兴你没有被阻止:)。你能把这个建议作为帮助别人的答案吗?谢谢
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()