Ich möchte Ausgabedateien im Unterverzeichnis zu einem Build-Ziel hinzufügen. Ich schrieb in CMakeLists.txt
wie unten:Dateien in Unterordnern zum Ziel hinzufügen
file(GLOB srcfiles "src/*.txt")
add_custom_target(subtask ALL)
set(dest_dir ${PROJECT_SOURCE_DIR}/sub/)
foreach(srcfile ${srcfiles})
string(REGEX REPLACE "^.*/(.*).txt$" filename ${srcfile})
add_custom_command(OUTPUT ${dest_dir}/${filename}.txt
COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${dest_dir}
COMMAND ${PROJECT_SOURCE_DIR}/process.sh ARGS ${srcfile}
MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/process.sh)
add_dependencies(subtask ${dest_dir}/${filename}.txt)
endforeach(srcfile)
und ausgeführt:
mkdir build && cmake .. && make
Aber sub/*.txt
sind nicht nach dem Bauprozess erstellt.
Wie sollte ich tun, um alle Befehle auf Build zu bauen?
aktualisiert (2017/2/4)
ich das Problem gelöst: für jedes Ziel add_custom_command
verwenden und dann add_custom_target
deklariert, die auf alle Zielen von add_custom_command
abhängt.
set(TARGET_FILES "")
file(GLOB SRC_FILES "src/*.txt")
foreach(SRC_FILE ${SRC_FILES})
string(REGEX REPLACE "^.*/(.*).txt$" "\\1-foo.txt" TARGET_FILE ${SRC_FILE})
add_custom_command(
OUTPUT ${PROJECT_SOURCE_DIR}/sub/${TARGET_FILE}
COMMAND ${CMAKE_COMMAND} ARGS -E make_directory ${PROJECT_SOURCE_DIR}/sub
COMMAND ${PROJECT_SOURCE_DIR}/process.sh ARGS ${SRC_FILE}
MAIN_DEPENDENCY ${PROJECT_SOURCE_DIR}/process.sh)
list(APPEND TARGET_FILES "${PROJECT_SOURCE_DIR}/sub/${TARGET_FILE}")
endforeach()
add_custom_target(foo_txt ALL DEPENDS ${TARGET_FILES})
ich das Problem gelöst: "(. Src/* .txt" '' ' Satz (TARGET_FILES ") GLOB SRC_FILES) Datei" foreach (SRC_FILE $ {SRC_FILES }) – furushchev