3
我有一個基於CMake的項目,它依賴於我需要下載和解壓縮的外部源。我決定使用ExternalProject_Add來完成這一部分。問題是如何使add_library規則依賴於一些提取的文件。Howto在CMake中包含來自第三方項目的選定源碼
這裏是我到目前爲止有:
# This line is needed for the ExternalProject command to work.
# It references the the Module in the cmake distro
include(ExternalProject)
# Download and extract the FreeRTOS core sources
set(FREERTOS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/FreeRTOS")
set(FREERTOS_URL "http://downloads.sourceforge.net/project/freertos/FreeRTOS/V6.0.2/FreeRTOSV6.0.2.zip")
set(FREERTOS_CORE_DIR ${FREERTOS_DIR}/Source)
set(FREERTOS_SOURCES "${FREERTOS_CORE_DIR}/croutine.c"
${FREERTOS_CORE_DIR}/list.c
${FREERTOS_CORE_DIR}/queue.c
${FREERTOS_CORE_DIR}/tasks.c
${FREERTOS_CORE_DIR}/portable/MemMang/heap_3.c)
include_directories(${FREERTOS_CORE_DIR}/include)
add_library(freertos STATIC ${FREERTOS_SOURCES})
ExternalProject_Add(freertos_download
DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}
SOURCE_DIR ${FREERTOS_DIR}
URL ${FREERTOS_URL}
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND "")
注意我已禁用的配置,構建和安裝在外部項目的步驟。
正如預期的那樣,因爲我沒有指定的依賴關係,我收到以下錯誤
-- Configuring done
CMake Error at third-party/CMakeLists.txt:20 (add_library):
Cannot find source file:
/home/dushara/prj/sw/djetk-demo/djetk/third-party/FreeRTOS/Source/croutine.c
Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
.hxx .in .txx
我嘗試使用
add_dependencies(freertos_download freertos)
但是,這是行不通的。
理想情況下,我希望FREERTOS_SOURCES中的所有項都取決於外部項目的提取階段。關於如何實現這一點的任何想法?