मैं एक निर्देशिका में add_custom_command द्वारा उत्पादित फ़ाइल प्राप्त करने का प्रयास कर रहा हूं ताकि किसी अन्य निर्देशिका में add_custom_command की निर्भरता हो।सेमेक: add_custom_command निर्भरताओं के साथ संघर्ष
पहले निर्देशिका (lib/कोर) मैं एक निर्माण आदेश है कि इस तरह दिखता है में:
:add_custom_command(
OUTPUT libcore.bc
COMMAND tartln -filetype=bc -link-as-library -o libcore.bc ${STDLIB_BC_FILES}
DEPENDS ${STDLIB_BC_FILES} tartln
COMMENT "Linking libcore.bc")
दूसरा निर्देशिका में, मैं एक आदेश है कि आदेश के उत्पादन का उपयोग करता है
add_custom_command(OUTPUT ${OBJ_FILE}
COMMAND tartln -disable-fp-elim -filetype=obj -o ${OBJ_FILE} ${BC_FILE}
"${PROJECT_BINARY_DIR}/lib/core/libcore.bc"
MAIN_DEPENDENCY "${BC_FILE}"
DEPENDS "${PROJECT_BINARY_DIR}/lib/core/libcore.bc"
COMMENT "Linking Tart bitcode file ${BC_FILE}")
हालांकि, जब मैं बनाने की कोशिश, मैं निम्नलिखित त्रुटि मिलती है:
make[3]: *** No rule to make target `lib/core/libcore.bc', needed by `test/stdlib/ReflectionTest.o'. Stop.
एक अजीब बात जो कि मैं देखता हूं कि त्रुटि संदेश में पथ एक सापेक्ष है, एक पूर्ण पथ नहीं है, इस तथ्य के बावजूद कि मुझे पता है कि $ {PROJECT_BINARY_DIR} एक पूर्ण, सही पथ है। मुझे नहीं पता कि यह एक समस्या है या सिर्फ बनाने की अजीबता है।
मैं भी libcore पुस्तकालय के लिए एक उच्च-स्तरीय लक्ष्य बनाने की कोशिश की है, lib/कोर निर्देशिका में:
add_custom_target(libcore DEPENDS libcore.bc libcore.deps)
और फिर का उपयोग कर DEPENDS खंड में है। इसके बारे में अजीब बात यह है कि यह पहली बार काम करता है जब आप एक स्वच्छ निर्माण करते हैं, लेकिन किसी भी बाद के निर्माण पर कोई त्रुटि देता है। किसी भी मामले में, मेरी समझ है कि डिस्पेंड केवल फ़ाइल निर्भरताओं के लिए काम करना चाहिए, इसलिए यह सही समाधान की तरह प्रतीत नहीं होता है। (आपके पास कस्टम कमांड कैसे है जो तब शीर्ष-स्तरीय लक्ष्य पर निर्भर करता है?)
मैंने हर जगह पूर्ण पथ डालने का भी प्रयास किया है, कोई प्रभाव नहीं।
दुर्भाग्यवश, यह समाधान काम नहीं करता है। (मुझे एहसास है कि लगभग एक वर्ष बीत जाने के बाद शायद यह निराशाजनक जवाब दे रहा है।) जहां तक मैं कह सकता हूं, add_custom_command का DEPENDS पैरामीटर फ़ाइल-स्तर निर्भरता होना चाहिए - हालांकि दस्तावेज़ कहते हैं कि एक लक्ष्य-स्तर निर्भरता * उसी में निर्देशिका * काम करेगा, वास्तव में मैंने पिछले 11 महीनों में कई अलग-अलग क्रमिक प्रयास किए हैं, और उनमें से कोई भी काम नहीं करता है। यही है, अगर मैं एक ही निर्देशिका में कस्टम लक्ष्य "foo" परिभाषित करता हूं, और उसके बाद "foo" का कहना है, तो यह केवल "लक्ष्य बनाने के लिए कोई नियम नहीं है" foo '... " – Talin
@Talin तो यह एक प्रतीत होता है बग, क्या इस मुद्दे के लिए [सीएमके बगट्रैकर] (http://www.cmake.org/Bug/my_view_page.php) पर रिपोर्ट की गई है? – lef