问题描述
我正在尝试从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来构建库和示例。”