के माध्यम से एक बैश कमांड चलाना मैं सीएमके को या तो तीन बैश कमांड या बैश स्क्रिप्ट चलाने की कोशिश कर रहा हूं। हालांकि, मैं इसे काम करने के लिए प्रतीत नहीं कर सकता।सीएमके
बैश आदेशों हैं:
cd ${CMAKE_SOURCE_DIR}/dependencies/library
make
cd ${CMAKE_BINARY_DIR}
अनिवार्य रूप से, मैं CMake चाहते हैं कि निर्देशिका में पुस्तकालय का निर्माण करता है, तो यह पहले से ही मौजूद नहीं है।
if(NOT "${CMAKE_SOURCE_DIR}/dependencies/library/lib.o")
execute_process(COMMAND cd ${CMAKE_SOURCE_DIR}/dependencies/library)
execute_process(COMMAND make)
execute_process(COMMAND cd ${CMAKE_BINARY_DIR})
endif(NOT "${CMAKE_SOURCE_DIR}/dependencies/library/lib.o")
हालांकि, यह कुछ भी निर्माण नहीं कर रहा है:
यहाँ CMake कोड मैंने कोशिश की है। मैं क्या गलत कर रहा हूं?
इसके अलावा, जबकि मैं यहां यह पूछ रहा हूं: तीसरा आदेश, बाइनरी फ़ोल्डर में जाने के लिए, शामिल होना चाहिए?
धन्यवाद!
सबसे पहले आप उन 'cd' आदेशों के बजाय' WORKING_DIRECTORY' पैरामीटर का उपयोग क्यों नहीं कर रहे हैं? कुछ 'execute_process (COMMAND WORKING_DIRECTORY $ {CMAKE_SOURCE_DIR}/निर्भरता/लाइब्रेरी) की तरह कुछ। मुझे लगता है, 'execute_process()' कॉल समान वातावरण साझा नहीं करता है। इसके अलावा, अगर मैं आप थे, तो मैं ['add_custom_target()'] (http://www.cmake.org/cmake/help/v3.0/command/add_custom_target.html?highlight=add_custom_target) देखता हूं। और ['add_custom_command()'] (http://www.cmake.org/cmake/help/v3.0/command/add_custom_command.html?highlight=add_custom_command) इस तरह की चीज़ के लिए। – Kamiccolo
मैं @Kamiccolo के अधिकांश लोगों पर टिप्पणी नहीं कर सकता लेकिन मैं कह सकता हूं कि मुझे लगता है कि 'execute_process' के बारे में विस्तार राज्य को साझा नहीं करना लगभग निश्चित रूप से सटीक है। यह * अविश्वसनीय रूप से * संभव है कि पहले कमांड में 'सीडी' केवल उस प्रक्रिया के लिए निर्देशिका को बदलता है, न कि किसी अन्य के लिए। –
यदि आप किसी तृतीय पक्ष लाइब्रेरी का निर्माण करना चाहते हैं, तो संभवतः आप [बाहरी प्रोजेक्ट] (http://www.cmake.org/cmake/help/v3.0/module/ExternalProject.html) मॉड्यूल का उपयोग करना बंद कर सकते हैं। – sakra