উত্তর:
দীর্ঘদিন ধরে, সিএমকে add_definitions
এই উদ্দেশ্যে কমান্ড ছিল । তবে, সম্প্রতি কমান্ডটি আরও সূক্ষ্ম দানযুক্ত পদ্ধতির দ্বারা বাতিল করা হয়েছে (সংজ্ঞা সংকলনের জন্য পৃথক কমান্ড, ডিরেক্টরি অন্তর্ভুক্ত করে এবং সংকলক বিকল্পগুলি)।
নতুন add_compile_definitions ব্যবহার করে একটি উদাহরণ :
add_compile_definitions(OPENCV_VERSION=${OpenCV_VERSION})
add_compile_definitions(WITH_OPENCV2)
বা:
add_compile_definitions(OPENCV_VERSION=${OpenCV_VERSION} WITH_OPENCV2)
এ সম্পর্কে ভাল দিকটি হ'ল এটি সিএমকে এর মতো জঘন্য কৌতুককে বাতিল করে দেয় add_definitions
। সিএমকে হ'ল এমন এক জঞ্জাল সিস্টেম, তবে তারা শেষ পর্যন্ত কিছুটা বিচক্ষণতার সন্ধান করছে।
সংকলক পতাকাগুলির জন্য কোন আদেশগুলি ব্যবহার করতে হবে সে সম্পর্কে আরও ব্যাখ্যা সন্ধান করুন: https://cmake.org/cmake/help/latest/command/add_definitions.html
তেমনি, জিম হুঞ্জিকারের উত্তরে বর্ণিত হিসাবে আপনি প্রতি লক্ষ্যটি এটি করতে পারেন।
add_compile_definitions
ছুড়ে ফেলে CMake Error at CMakeLists.txt:6 (add_compile_definitions): Unknown CMake command "add_compile_definitions".
। add_compile_options(-D <your-def>)
পরিবর্তে ব্যবহার করতে হবে।
cmake -D CMAKE_CXXFLAGS='-DDEBUG_CHESSBOARD'
পরীক্ষা করা হয়নি
https://cmake.org/cmake/help/v3.17/command/add_compile_definitions.html#command:add_compile_definitions
এবং পৃষ্ঠাটি অদৃশ্য না হওয়া পর্যন্ত সংস্করণ নম্বরটি নীচে পরিবর্তন শুরু করতে পারেন । এটি এমন সংস্করণ হবে যেখানে এটি এখনও বিদ্যমান নেই। পরবর্তী পদক্ষেপে আপনি Whats new
বিভাগে যেতে পারেন একটি নতুন আদেশ বা বৈশিষ্ট্য সন্ধান করতে। সুতরাং এটি এত কঠিন না।
নির্দিষ্ট লক্ষ্যের জন্য এটি করতে, আপনি নিম্নলিখিতগুলি করতে পারেন:
target_compile_definitions(my_target PRIVATE FOO=1 BAR=1)
আপনার তৈরি করা একাধিক টার্গেট থাকলে আপনার এটি করা উচিত এবং আপনি চান না যে সেগুলি সমস্ত একই পতাকা ব্যবহার করবে। টার্গেট_কম্পাইল_ডিফাইনিশনে সরকারী ডকুমেন্টেশনও দেখুন ।
target_compile_definitions(my_target PRIVATE FOO=1)
আলাদা set_source_files_properties(foo.cpp PROPERTIES COMPILE_DEFINITIONS -DFOO=1)
?
target_compile_definitions
WHOLE এক্সিকিউটেবল / লাইব্রেরির জন্য মান সেট করে, যেখানে 'set_source_files_properties` হিসাবে কেবলমাত্র নির্দিষ্ট ফাইলের জন্য মান সেট করে। ল্যাটার কমান্ড ফাইলগুলিকে একটি ভিন্ন ভাষা ব্যবহার করে সংকলন করার অনুমতি দেয়; অর্থাৎ, set_source_files_properties(compile_me_as_objc.c PROPERTIES -x objective-c
। মনে রাখবেন যে -x objective-c
এখানে জিসিসি / কলংয়ের জন্য নির্দিষ্ট একটি পতাকা রয়েছে।
অন্যান্য সমাধান এই পৃষ্ঠাতে প্রস্তাবিত দরকারী Cmake কিছু সংস্করণ <
3.3.2
। এখানে আমি যে সংস্করণটি ব্যবহার করছি তার সমাধান (যেমন,3.3.2
)। আপনার কামেকের সংস্করণটি পরীক্ষা করে দেখুন$ cmake --version
এবং আপনার প্রয়োজনীয়তার সাথে উপযুক্ত সমাধানটি বেছে নিন। Cmake ডকুমেন্টেশন কর্মকর্তা পৃষ্ঠাতে পাওয়া যেতে পারে।
সিএমকে সংস্করণ 3.3.2 সহ, তৈরি করতে
#define foo
আমার ব্যবহার করা দরকার:
add_definitions(-Dfoo) # <--------HERE THE NEW CMAKE LINE inside CMakeLists.txt
add_executable( ....)
target_link_libraries(....)
এবং, এই অন্যটির মতো একটি প্রিপ্রোসেসর ম্যাক্রো সংজ্ঞা পেতে:
#define foo=5
লাইনটি এতটাই সংশোধিত হয়েছে:
add_definitions(-Dfoo=5) # <--------HERE THE NEW CMAKE LINE inside CMakeLists.txt
add_executable( ....)
target_link_libraries(....)
add_definitions()
বা target_compile_definitions()
। আরও আধুনিক কমান্ড, add_compile_definitions()
সিএমকেক ৩.১২ অবধি যোগ করা হয়নি। @ লিওস 313