我正在为微控制器创建一个库,作为其源代码的一部分,它将有几个使用示例。
这些示例的所有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目标和自定义命令。
发布于 2017-11-07 07:39:09
在CMake中,参数化某些操作序列(以便以后重用)的最直接方法是创建宏或函数。它们都可以执行任何可以在普通CMakeLists.txt
中写入的操作。
https://stackoverflow.com/questions/47146610
复制相似问题