【问题标题】:How to parameterize cmake add_custom_command and add_custom_target?如何参数化 cmake add_custom_command 和 add_custom_target?
【发布时间】:2017-11-06 22:04:44
【问题描述】:

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

示例的所有 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 目标和自定义命令。

【问题讨论】:

  • 定义执行参数化步骤的函数/宏有什么问题?
  • @Tsyvarev 对 cmake 来说是全新的我没有想过这个:) 现在看起来很明显。请将您的评论作为答案,以便我选择它作为解决方案。

标签: cmake cmake-custom-command


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多