2016-05-12 17 views
0

Sorry, ich bin neu zu machen und CMake, aber ich versuche, dieses Beispiel AWS IoT make in CMake zu konvertieren. Abgesehen von der Einbeziehung der mbedTLS-Bibliothek ist mir das meiste gelungen. Es sieht so aus, als ob es eine Untermarke dieser Bibliothek gibt, und dann wird sie eingeschlossen.Konvertieren von Make zu CMake mit externen Bibliotheken

Alle Hinweise würden geschätzt, oder weitere Lektüre zu diesem Thema.

#This target is to ensure accidental execution of Makefile as a bash script will not execute commands like rm in unexpected directories and exit gracefully. 
.prevent_execution: 
    exit 0 

CC = gcc 

#remove @ for no make command prints 
DEBUG = @ 

APP_DIR = . 
APP_INCLUDE_DIRS += -I $(APP_DIR) 
APP_NAME = subscribe_publish_sample 
APP_SRC_FILES = $(APP_NAME).c 

#IoT client directory 
IOT_CLIENT_DIR = ../../.. 

PLATFORM_DIR = $(IOT_CLIENT_DIR)/platform/linux/mbedtls 
PLATFORM_COMMON_DIR = $(IOT_CLIENT_DIR)/platform/linux/common 

IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/include 
IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/external_libs/jsmn 
IOT_INCLUDE_DIRS += -I $(PLATFORM_COMMON_DIR) 
IOT_INCLUDE_DIRS += -I $(PLATFORM_DIR) 

IOT_SRC_FILES += $(shell find $(IOT_CLIENT_DIR)/src/ -name '*.c') 
IOT_SRC_FILES += $(shell find $(IOT_CLIENT_DIR)/external_libs/jsmn -name '*.c') 
IOT_SRC_FILES += $(shell find $(PLATFORM_DIR)/ -name '*.c') 
IOT_SRC_FILES += $(shell find $(PLATFORM_COMMON_DIR)/ -name '*.c') 

#TLS - mbedtls 
MBEDTLS_DIR = $(IOT_CLIENT_DIR)/external_libs/mbedTLS 
TLS_LIB_DIR = $(MBEDTLS_DIR)/library 
TLS_INCLUDE_DIR = -I $(MBEDTLS_DIR)/include 
EXTERNAL_LIBS += -L$(TLS_LIB_DIR) 
LD_FLAG += -Wl,-rpath,$(TLS_LIB_DIR) 
LD_FLAG += -ldl $(TLS_LIB_DIR)/libmbedtls.a $(TLS_LIB_DIR)/libmbedcrypto.a $(TLS_LIB_DIR)/libmbedx509.a -lpthread 

#Aggregate all include and src directories 
INCLUDE_ALL_DIRS += $(IOT_INCLUDE_DIRS) 
INCLUDE_ALL_DIRS += $(TLS_INCLUDE_DIR) 
INCLUDE_ALL_DIRS += $(APP_INCLUDE_DIRS) 

SRC_FILES += $(APP_SRC_FILES) 
SRC_FILES += $(IOT_SRC_FILES) 

# Logging level control 
LOG_FLAGS += -DIOT_DEBUG 
LOG_FLAGS += -DIOT_INFO 
LOG_FLAGS += -DIOT_WARN 
LOG_FLAGS += -DIOT_ERROR 

COMPILER_FLAGS += $(LOG_FLAGS) 
#If the processor is big endian uncomment the compiler flag 
#COMPILER_FLAGS += -DREVERSED 

MBED_TLS_MAKE_CMD = cd $(MBEDTLS_DIR) && make 

PRE_MAKE_CMD = $(MBED_TLS_MAKE_CMD) 
MAKE_CMD = $(CC) $(SRC_FILES) $(COMPILER_FLAGS) -o $(APP_NAME) $(LD_FLAG) $(EXTERNAL_LIBS) $(INCLUDE_ALL_DIRS) 

all: 
    $(PRE_MAKE_CMD) 
    $(DEBUG)$(MAKE_CMD) 
    $(POST_MAKE_CMD) 

clean: 
    rm -f $(APP_DIR)/$(APP_NAME) 
    $(MBED_TLS_MAKE_CMD) clean 

Dies ist, was ich bisher habe.

cmake_minimum_required(VERSION 3.5) 
project(Gateway) 

include_directories("${PROJECT_BINARY_DIR}" "external_libs/jsmin" "platform/linux/mbedtls" "platform/linux/common" "include") 

set(SOURCE_FILES subscribe_publish_sample.c) 

file(GLOB IOT_CLIENT_SOURCES "src/*.c") 
file(GLOB IOT_CLIENT_EXTERNAL_SOURCES "external_libs/jsmn/*.c") 
file(GLOB PLATFORM_SOURCES "platform/linux/mbedtls/*.c") 
file(GLOB PLATFORM_COMMON_SOURCES "platform/linux/common/*.c") 

add_executable(Gateway ${SOURCE_FILES} ${IOT_CLINT_SOURCES} ${IOT_CLIENT_EXTERNAL_SOURCES} ${PLATFORM_SOURCES} ${PLATFORM_COMMON_SOURCES}) 

https://github.com/aws/aws-iot-device-sdk-embedded-C

+0

In CMake [add_subdirectory] (https://cmake.org/cmake/help/v3.0/command/add_subdirectory.html) für Verfahren verwendet werden, 'CMakeLists.txt' auch in diesem Verzeichnis. Wahrscheinlich müssen Sie diesen Befehl verwenden. – Tsyvarev

Antwort

1

Aprox Ordnerstruktur:

aws_iot 
| - embedded C sdk folders 
| - .... 
sample 
| - include 
    | - aws_iot_config.h 
| - src 
    | - subscribe_publish_sample.c 

Original-Makefile (aktualisierte Version)

.prevent_execution: 
    exit 0 
#This target is to ensure accidental execution of Makefile as a bash script will not execute commands like rm in unexpected directories and exit gracefully. 

CC = gcc 

#remove @ for no make command prints 
[email protected] 

APP_DIR = . 
APP_INCLUDE_DIRS += -I $(APP_DIR) 
APP_NAME=subscribe_publish_sample 
APP_SRC_FILES=$(APP_NAME).c 

#IoT client directory 
IOT_CLIENT_DIR=../../aws_iot_src 
IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt 
IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper 
IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux 
IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/common 
IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/openssl 
IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/utils 

PLATFORM_DIR = $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/openssl 
PLATFORM_COMMON_DIR = $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/common 
IOT_SRC_FILES += $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/aws_iot_mqtt_embedded_client_wrapper.c 
IOT_SRC_FILES += $(shell find $(PLATFORM_DIR)/ -name '*.c') 
IOT_SRC_FILES += $(shell find $(PLATFORM_COMMON_DIR)/ -name '*.c') 

#MQTT Paho Embedded C client directory 
MQTT_DIR = ../../aws_mqtt_embedded_client_lib 
MQTT_C_DIR = $(MQTT_DIR)/MQTTClient-C/src 
MQTT_EMB_DIR = $(MQTT_DIR)/MQTTPacket/src 

MQTT_INCLUDE_DIR += -I $(MQTT_EMB_DIR) 
MQTT_INCLUDE_DIR += -I $(MQTT_C_DIR) 

MQTT_SRC_FILES += $(shell find $(MQTT_EMB_DIR)/ -name '*.c') 
MQTT_SRC_FILES += $(MQTT_C_DIR)/MQTTClient.c 


#TLS - openSSL 
TLS_LIB_DIR = /usr/lib/ 
TLS_INCLUDE_DIR = -I /usr/include/openssl 
EXTERNAL_LIBS += -L$(TLS_LIB_DIR) 
LD_FLAG := -ldl -lssl -lcrypto 
LD_FLAG += -Wl,-rpath,$(TLS_LIB_DIR) 

#Aggregate all include and src directories 
INCLUDE_ALL_DIRS += $(IOT_INCLUDE_DIRS) 
INCLUDE_ALL_DIRS += $(MQTT_INCLUDE_DIR) 
INCLUDE_ALL_DIRS += $(TLS_INCLUDE_DIR) 
INCLUDE_ALL_DIRS += $(APP_INCLUDE_DIRS) 

SRC_FILES += $(MQTT_SRC_FILES) 
SRC_FILES += $(APP_SRC_FILES) 
SRC_FILES += $(IOT_SRC_FILES) 

# Logging level control 
LOG_FLAGS += -DIOT_DEBUG 
LOG_FLAGS += -DIOT_INFO 
LOG_FLAGS += -DIOT_WARN 
LOG_FLAGS += -DIOT_ERROR 


COMPILER_FLAGS += -g 
COMPILER_FLAGS += $(LOG_FLAGS) 
#If the processor is big endian uncomment the compiler flag 
#COMPILER_FLAGS += -DREVERSED 

MAKE_CMD = $(CC) $(SRC_FILES) $(COMPILER_FLAGS) -o $(APP_NAME) $(LD_FLAG) $(EXTERNAL_LIBS) $(INCLUDE_ALL_DIRS) 

all: 
    $(PRE_MAKE_CMD) 
    $(DEBUG)$(MAKE_CMD) 
    $(POST_MAKE_CMD) 

clean: 
    rm -f $(APP_DIR)/$(APP_NAME)  

Converted CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3) 
project(sample) 


# Setup appropriate path to C SDK 
set(AWS_IOT_ROOT_DIR ../aws_iot) 

#IoT client directory 
#> IOT_CLIENT_DIR=../../aws_iot_src 
set(IOT_CLIENT_DIR ${AWS_IOT_ROOT_DIR}/aws_iot_src) 

#> IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt 
#> IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper 
#> IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux 
#> IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/common 
#> IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/openssl 
#> IOT_INCLUDE_DIRS += -I $(IOT_CLIENT_DIR)/utils 
include_directories(
    ${IOT_CLIENT_DIR}/protocol/mqtt 
    ${IOT_CLIENT_DIR}/protocol/mqtt/aws_iot_embedded_client_wrapper 
    ${IOT_CLIENT_DIR}/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux 
    ${IOT_CLIENT_DIR}/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/common 
    ${IOT_CLIENT_DIR}/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/openssl 
    ${IOT_CLIENT_DIR}/utils 
) 


#> PLATFORM_DIR = $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/openssl 
set(PLATFORM_DIR ${IOT_CLIENT_DIR}/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/openssl) 

#> PLATFORM_COMMON_DIR = $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/common 
set(PLATFORM_COMMON_DIR ${IOT_CLIENT_DIR}/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/common) 

#> IOT_SRC_FILES += $(IOT_CLIENT_DIR)/protocol/mqtt/aws_iot_embedded_client_wrapper/aws_iot_mqtt_embedded_client_wrapper.c 
#> IOT_SRC_FILES += $(shell find $(PLATFORM_DIR)/ -name '*.c') 
#> IOT_SRC_FILES += $(shell find $(PLATFORM_COMMON_DIR)/ -name '*.c') 
file(GLOB IOT_SRC_FILES 
    ${IOT_CLIENT_DIR}/protocol/mqtt/aws_iot_embedded_client_wrapper/aws_iot_mqtt_embedded_client_wrapper.c 
    ${PLATFORM_DIR}/*.c 
    ${PLATFORM_COMMON_DIR}/*.c 
) 

#MQTT Paho Embedded C client directory 
#> MQTT_DIR = ../../aws_mqtt_embedded_client_lib 
set(MQTT_DIR ${AWS_IOT_ROOT_DIR}/aws_mqtt_embedded_client_lib) 

#> MQTT_C_DIR = $(MQTT_DIR)/MQTTClient-C/src 
set(MQTT_C_DIR ${MQTT_DIR}/MQTTClient-C/src) 

#> MQTT_EMB_DIR = $(MQTT_DIR)/MQTTPacket/src 
set(MQTT_EMB_DIR ${MQTT_DIR}/MQTTPacket/src) 


#> MQTT_SRC_FILES += $(shell find $(MQTT_EMB_DIR)/ -name '*.c') 
#> MQTT_SRC_FILES += $(MQTT_C_DIR)/MQTTClient.c 
file(GLOB MQTT_SRC_FILES 
    ${MQTT_EMB_DIR}/*.c 
    ${MQTT_C_DIR}/MQTTClient.c 
) 

#TLS - openSSL 
#> TLS_LIB_DIR = /usr/lib/ 
#> TLS_INCLUDE_DIR = -I /usr/include/openssl 
set(TLS_INCLUDE_DIR /usr/include/openssl) 
find_package(OpenSSL REQUIRED openssl) 

# this just for debug purpose 
message("OPENSSL_ROOT_DIR is ${OPENSSL_ROOT_DIR}") 
message("OPENSSL_LIBRARIES is ${OPENSSL_LIBRARIES}") 


#Aggregate all include and src directories 
#> MQTT_INCLUDE_DIR += -I $(MQTT_EMB_DIR) 
#> MQTT_INCLUDE_DIR += -I $(MQTT_C_DIR) 
#> INCLUDE_ALL_DIRS += $(IOT_INCLUDE_DIRS) 
#> INCLUDE_ALL_DIRS += $(MQTT_INCLUDE_DIR) 
#> INCLUDE_ALL_DIRS += $(TLS_INCLUDE_DIR) 
#> INCLUDE_ALL_DIRS += $(APP_INCLUDE_DIRS) 
include_directories(
    include 
    ${TLS_INCLUDE_DIR} 
    ${MQTT_EMB_DIR} 
    ${MQTT_C_DIR} 
) 


#> SRC_FILES += $(MQTT_SRC_FILES) 
#> SRC_FILES += $(APP_SRC_FILES) 
set(SOURCE_FILES 
    ${IOT_SRC_FILES} 
    ${MQTT_SRC_FILES} 
) 


#> MAKE_CMD = $(CC) $(SRC_FILES) $(COMPILER_FLAGS) -o $(APP_NAME) $(LD_FLAG) $(EXTERNAL_LIBS) $(INCLUDE_ALL_DIRS) 
add_executable(subscribe_publish_sample src/subscribe_publish_sample.c ${SOURCE_FILES}) 
target_link_libraries(subscribe_publish_sample ${OPENSSL_LIBRARIES}) 

Werfen Sie einen Blick auf diese CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3) 
project(sample) 

# Define correct path to embedded C sdk 
set(AWS_IOT_ROOT_DIR ../aws_iot) 
set(IOT_CLIENT_DIR ${AWS_IOT_ROOT_DIR}/aws_iot_src) 
include_directories(
    ${IOT_CLIENT_DIR}/protocol/mqtt 
    ${IOT_CLIENT_DIR}/protocol/mqtt/aws_iot_embedded_client_wrapper 
    ${IOT_CLIENT_DIR}/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux 
    ${IOT_CLIENT_DIR}/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/common 
    ${IOT_CLIENT_DIR}/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/openssl 
    ${IOT_CLIENT_DIR}/utils 
) 

set(MQTT_DIR ${AWS_IOT_ROOT_DIR}/aws_mqtt_embedded_client_lib) 
set(MQTT_C_DIR ${MQTT_DIR}/MQTTClient-C/src) 
set(MQTT_EMB_DIR ${MQTT_DIR}/MQTTPacket/src) 

include_directories(
    ${MQTT_EMB_DIR} 
    ${MQTT_C_DIR} 
) 


set(TLS_INCLUDE_DIR /usr/include/openssl) 
include_directories(
    include 
    ${TLS_INCLUDE_DIR} 
) 

set(PLATFORM_DIR ${IOT_CLIENT_DIR}/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/openssl) 
set(PLATFORM_COMMON_DIR ${IOT_CLIENT_DIR}/protocol/mqtt/aws_iot_embedded_client_wrapper/platform_linux/common) 
file(GLOB IOT_SRC_FILES 
    ${IOT_CLIENT_DIR}/protocol/mqtt/aws_iot_embedded_client_wrapper/aws_iot_mqtt_embedded_client_wrapper.c 
    ${PLATFORM_DIR}/*.c 
    ${PLATFORM_COMMON_DIR}/*.c 
    ) 

file(GLOB MQTT_SRC_FILES 
    ${MQTT_EMB_DIR}/*.c 
    ${MQTT_C_DIR}/MQTTClient.c 
    ) 

set(SOURCE_FILES 
    ${IOT_SRC_FILES} 
    ${MQTT_SRC_FILES}) 

find_package(OpenSSL REQUIRED openssl) 

add_executable(subscribe_publish_sample src/subscribe_publish_sample.c ${SOURCE_FILES}) 
target_link_libraries(subscribe_publish_sample ${OPENSSL_LIBRARIES}) 
+0

Dies ist eine Tonne blanker Code, der dem OP ohne Erklärung nicht wirklich dienlich sein wird. Bitte fügen Sie eine lesbare Definition hinzu, was Sie vorschlagen. –