ऐसा करने के लिए आपको बिल्ड निर्देशिका में आवश्यक फ़ाइल के लिए बिल्ड नियम बनाने के लिए add_custom_command का उपयोग करना चाहिए। फिर उन लक्ष्यों पर अपने लक्ष्यों से निर्भरता जोड़ें: सीएमके केवल एक लक्ष्य द्वारा आवश्यक होने पर कुछ बनाते हैं।
यदि आप स्रोत निर्देशिका से नहीं बना रहे हैं तो आपको केवल फाइलों की प्रतिलिपि बनाना सुनिश्चित करना चाहिए।
कुछ इस तरह:
project(foo)
cmake_minimum_required(VERSION 2.8)
# we don't want to copy if we're building in the source dir
if (NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
# list of files for which we add a copy rule
set(data_SHADOW yourimg.png)
foreach(item IN LISTS data_SHADOW)
message(STATUS ${item})
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${item}"
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/${item}" "${CMAKE_CURRENT_BINARY_DIR}/${item}"
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/${item}"
)
endforeach()
endif()
# files are only copied if a target depends on them
add_custom_target(data-target ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/yourimg.png")
इस मामले में मैं yourimg.png फ़ाइल पर निर्भरता के साथ एक "सभी" कस्टम लक्ष्य का उपयोग कर रहा प्रतिलिपि मजबूर करने के लिए है, लेकिन आप भी एक पर निर्भरता को जोड़ सकते हैं अपने मौजूदा लक्ष्यों का।
क्या कर add_custom_target लाइन करता है। मैंने आपके कोड को संशोधित करने की कोशिश की और add_custom_target लाइन के लिए फ़ोरैच लूप भी शामिल किया लेकिन यह कई फ़ाइलों पर विफल रहता है – Archit
हाँ, मुझे लगता है कि आपको निर्भरताओं के साथ समस्या है ... जैसा कि मैंने कहा है कि केवल लक्ष्य द्वारा आवश्यक फाइलें बनाई गई हैं। इसलिए यदि आपकी छवियों पर निर्भर कोई लक्ष्य नहीं है, तो वे नहीं बनाए जाएंगे। यही कारण है कि मैं अपने उदाहरण में "add_custom_target" जोड़ रहा हूं। बीटीडब्ल्यू एक बेहतर नियम 'add_custom_target (डेटा-लक्षित सभी $ $ data_HADOW} हो सकता है)' इसलिए यह हमेशा सभी छवियों पर निर्भर करता है। – Guillaume