如何参数化cmake add_custom_command和add_custom_target?

时间:2017-11-06 22:04:44

标签: cmake

我正在为微控制器创建一个库,作为其源代码的一部分,它将有几个用法示例。

示例的所有CMakeList.txt文件看起来非常相似:

set(ESP_TARGET_FW1 "${CMAKE_CURRENT_BINARY_DIR}/${ESP_FW1}.bin")
set(ESP_TARGET_FW2 "${CMAKE_CURRENT_BINARY_DIR}/${ESP_FW2}.bin")

add_executable(esp_main main.c ${ESP_USER_CONFIG})
target_include_directories(esp_main PUBLIC include)
target_link_libraries(esp_main esp_sdo phy pp net80211)

# Create ESP8266 binary files.
add_custom_command(
    OUTPUT
        ${ESP_TARGET_FW1} ${ESP_TARGET_FW2}
    COMMAND
        ${ESPTOOL_PATH} elf2image $<TARGET_FILE:esp_main> -o ${CMAKE_CURRENT_BINARY_DIR}/
    DEPENDS
        esp_main
)

# Flash binary files to the device.
add_custom_target(esp_main_flash
    COMMAND
        ${ESPTOOL_PATH} -p ${ESP_PORT} -b ${ESP_BAUD} write_flash ${ESP_FW1} ${ESP_TARGET_FW1} ${ESP_FW2} ${ESP_TARGET_FW2}
    DEPENDS
        ${ESP_TARGET_FW1} ${ESP_TARGET_FW2}
)

仅示例名称(esp_main)发生更改以及创建生成的二进制文件的位置。

我希望以某种方式参数化add_custom_command和add_custom_target,如果是这样的话。理想情况下包含一些文件,并定义esp_main_flash目标和自定义命令。

1 个答案:

答案 0 :(得分:1)

在CMake中,参数化某些操作序列(以便以后重用)的最直接方法是创建宏或函数。允许它们执行任何可以用普通CMakeLists.txt编写的操作。