Я на самом деле требовал бы выбирать более простой язык с меньшим количеством инструкций. Я лично учился на ОСНОВНОМ дома, поскольку сделал Jeff. Таким образом, Вы не должны копаться в более сложных проблемах как объектно-ориентированное программирование, или даже процедурах, если Вы не хотите. Как только он может обработать простой поток управления, затем углубить к чему-то немного более сложные, но только простые функции.
, Возможно, запускаются с очень простых программ, которые просто добавляют 2 числа, и затем растут до чего-то, что могло бы потребовать ответвления, тогда возможно, читая вход и ответив на него, тогда некоторый цикл, и начинать комбинировать их всех вместе. Только запустите мало и проложите себе путь. Не делайте никаких больших проектов, пока он не может схватить основные принципы (иначе, это может быть слишком пугающим, и он мог сдаться на полпути). Как только он освоил ОСНОВНОЙ или независимо от того, что Вы выбираете, движение к чему-то более сложному.
Просто мои 0,02$
Я должен был сделать что-то подобное, но нашел удивительно трудным получить рабочее решение, несмотря на пример, обеспеченный здесь принятым ответом и фрагментами кода, обеспеченными в нескольких других сообщениях в блоге, CMake поддерживают электронную почту listserv архивы, и т.д. В пользу других, которые сталкиваются с этим вопросом, вот мое решение.
внешний проект, который мы хотели использовать, libmodbus
, хотя я полагаю, что мое решение является достаточно общим для работы с любым проектом, настроенным со стандартом autoconf
рецепт ./autoconf.sh && configure.sh && make && make install
.
Мы хотели добавить libmodbus
как подмодуль нашего репозитория мерзавца. Мы добавили к нашему репозиторию в пути <root>/opt/libmodbus
. Эти CMake
код для конфигурирования его расположен в <root>/cmake/modbus.cmake
, который включен от нашего корня CMakeLists.txt
использование
# libmodbus
include(cmake/modbus.cmake)
, содержание [1 111]:
include(ExternalProject)
set(MODBUS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/opt/libmodbus)
set(MODBUS_BIN ${CMAKE_CURRENT_BINARY_DIR}/libmodbus)
set(MODBUS_STATIC_LIB ${MODBUS_BIN}/lib/libmodbus.a)
set(MODBUS_INCLUDES ${MODBUS_BIN}/include)
file(MAKE_DIRECTORY ${MODBUS_INCLUDES})
ExternalProject_Add(
libmodbus
PREFIX ${MODBUS_BIN}
SOURCE_DIR ${MODBUS_DIR}
DOWNLOAD_COMMAND cd ${MODBUS_DIR} && git clean -dfX && ${MODBUS_DIR}/autogen.sh
CONFIGURE_COMMAND ${MODBUS_DIR}/configure --srcdir=${MODBUS_DIR} --prefix=${MODBUS_BIN} --enable-static=yes --disable-shared
BUILD_COMMAND make
INSTALL_COMMAND make install
BUILD_BYPRODUCTS ${MODBUS_STATIC_LIB}
)
add_library(modbus STATIC IMPORTED GLOBAL)
add_dependencies(modbus libmodbus)
set_target_properties(modbus PROPERTIES IMPORTED_LOCATION ${MODBUS_STATIC_LIB})
set_target_properties(modbus PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${MODBUS_INCLUDES})
компонент А, который использует libmodbus
, может объявить свою зависимость, как обычно:
add_executable(hello_modbus main.cpp)
target_link_libraries(hello_modbus modbus)
Несколько примечаний:
DOWNLOAD_COMMAND
для выполнения эти autogen.sh
шаг. Эти git clean -dfX
, вероятно, не необходимо (это - остаток от более ранней версии, которая использовала BUILD_IN_SOURCE
опция. Если Вы действительно захотите загрузить код вместо того, чтобы использовать подмодуль мерзавца, то необходимо будет изменить эту строку соответственно. configure
командная строка, если Вы хотите совместно использованные библиотеки. set_target_properties
управляют для установки эти IMPORTED_LOCATION
, перестанет работать без BUILD_BYPRODUCTS ${MODBUS_STATIC_LIB}
объявление. set_target_properties
команда для установки эти INTERFACE_INCLUDE_DIRECTORIES
перестанет работать без file(MAKE_DIRECTORY ${MODBUS_INCLUDES})
.