আমি কীভাবে সিএমকে আউটপুটটিকে 'বিন' দির রূপ দেব?


186

আমি বর্তমানে একটি প্লাগইন কাঠামো সহ একটি প্রকল্প নির্মাণ করছি। আমি প্রকল্পটি সংকলন করতে সিএমকে ব্যবহার করছি। প্লাগইনগুলি পৃথক ডিরেক্টরিতে সংকলিত হয়। আমার সমস্যাটি হ'ল সিএমেক উত্সের ডিরেক্টরি কাঠামোয় বাইনারি এবং প্লাগইনগুলি, গতিশীল লাইব্রেরিগুলি সংকলন করে সংরক্ষণ করে। আমি কীভাবে সিএমকে ফাইলগুলিকে ./bin ডিরেক্টরিতে সংরক্ষণ করতে পারি ?

উত্তর:


298

ওলেগের উত্তরের মতই , আমি বিশ্বাস করি যে সেট করতে সঠিক ভেরিয়েবলটি CMAKE_RUNTIME_OUTPUT_DIRECTORY । আমরা আমাদের রুট সিএমকেলিস্ট.টেক্সটে নিম্নলিখিতটি ব্যবহার করি:

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

আপনি প্রতি লক্ষ্য ভিত্তিতে আউটপুট ডিরেক্টরিগুলিও নির্দিষ্ট করতে পারেন:

set_target_properties( targets...
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

উভয় ক্ষেত্রেই আপনি সংযুক্ত করতে পারবেন _[CONFIG]পরিবর্তনশীল / সম্পত্তি নাম আউটপুট ডিরেক্টরি একটি নির্দিষ্ট কনফিগারেশন (কনফিগারেশনের জন্য মান মান প্রযোজ্য করতে DEBUG, RELEASE, MINSIZERELএবং RELWITHDEBINFO)।


8
আপনি এটি প্রতি লক্ষ্য ভিত্তিতে RUNTIME_OUTPUT_DIRECTORY টার্গেট সম্পত্তি সেট করে ওভাররাইড করতে পারেন। ডকুমেন্টেশন এখানে দেখুন: cmake.org/cmake/help/…
DLRdave

4
ডিএলআরডেভের লিঙ্কটি মারা গেছে। Cmake.org/cmake/help/v2.8.8/…
নিকু স্টিড়কা

কীভাবে এটি একবারে সমস্ত কনফিগারেশনে প্রয়োগ করা যায়?
এম্লাই

প্রথম তিনটি কমান্ড সমস্ত কনফিগারেশনের ক্ষেত্রে প্রয়োগ করা উচিত (বিশেষত CMAKE_RUNTIME_OUTPUT_DIRECTORY সেট করা)। আপনি যদি কেবল ডিবাগ আউটপুটের জন্য আলাদা ডিরেক্টরি চান তবে আপনি কেবল CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG সেট করবেন। সঠিক আচরণ আপনি ব্যবহার করছেন জেনারেটর / সরঞ্জামচেইনের উপর নির্ভর করে (উদাহরণস্বরূপ ভিজ্যুয়াল স্টুডিও প্রকল্প ফাইলগুলিতে একটি বিল্ড ট্রিতে সমস্ত কনফিগারেশন অন্তর্ভুক্ত থাকে, যদিও মেকফিল জেনারেটর কেবল একটি বিল্ড কনফিগারেশনের জন্য মেকফাইল তৈরি করে)।
অ্যাডাম

1
CMAKE_ARCHIVE_OUTPUT_DIRECTORYকমান্ডটি install(TARGETS <target_name>)এখনও "এক্সিকিউটেবল টার্গেটের জন্য কোনও রুনটাইম ডিস্টিনেশন দেওয়া হয়নি" সম্পর্কে অভিযোগ করে সেটিংয়ের উদ্দেশ্য কী ? এই পরিবর্তনশীলটি সম্ভবত একটি ডিফল্ট মান সরবরাহ করে, সুতরাং installকমান্ডটি একটি এর অনুপস্থিতি সম্পর্কে অভিযোগ করা উচিত নয় RUNTIME DESTINATION
thiagowfx

30

ব্যবহার set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "/some/full/path/to/bin")


10
ভেরিয়েবল মান হিসাবে ডিরেক্টরিতে পুরো পথের নামটি ব্যবহার করুন এবং অ্যাডাম বোভেনের উত্তরের মত মানটিকে "/" মান হিসাবে রাখবেন না।
ডিএলআরডেভ

4
আপনাকে কেন পুরো পথ জুড়তে হবে? আপনি যখন আপনার প্রকল্পটি সরান তখন বিরক্তির মতো মনে হয় ...
স্কটএফ

8

EXECUTABLE_OUTPUT_PATHপ্রয়োজনীয় পাথ সেট করতে সিএমকে ভেরিয়েবলটি ব্যবহার করুন । বিস্তারিত জানার জন্য, অনলাইন সিএমকে ডকুমেন্টেশন দেখুন:

সিএমকে ২.৮.৮ ডকুমেন্টেশন


15
EXECUTABLE_OUTPUT_PATH এখনও এই মুহুর্তে কাজ করে তবে এই ফলাফলটি অর্জনের "পুরানো" উপায়। অ্যাডাম বোয়েনের উত্তর হ'ল প্রস্তাবিত পন্থা।
DLRdave

4

আমার হিসাবে আমি cmake 3.5 ব্যবহার করছি, নীচের ( set variable) কাজ করে না:

set(
      ARCHIVE_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
      LIBRARY_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
      RUNTIME_OUTPUT_DIRECTORY "/home/xy/cmake_practice/bin/"
)

তবে এটি কাজ করে ( set set_target_properties):

set_target_properties(demo5
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
    LIBRARY_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
    RUNTIME_OUTPUT_DIRECTORY "/home/xy/cmake_practice/bin/"
)

2
আমি অ্যাডামের উত্তরটি সেট সহ ব্যবহার করছি (সিএমএকেই _... এবং এটি কাজ করে, তবে আপনি যখন গ্রন্থাগার, এক্সিকিউটেবল ইত্যাদি যোগ করার আগে এটি করেন তবে আমি আমার মত নতুনদের জন্য এটি গুরুত্বপূর্ণ নোট মনে করি।
আশ্রমুন

কি দারুন. @ আশ্রমসুন কয়েক ঘন্টা পরে আমাকে পাগল হওয়ার হাত থেকে বাঁচাল। এই কমান্ডগুলির ক্রমটি অত্যন্ত প্রাসঙ্গিক বলে উপলব্ধি না হওয়া অবধি কিছুই কাজ করছিল না।
আর্থারপড

2
$ cat CMakeLists.txt
project (hello)
set(EXECUTABLE_OUTPUT_PATH "bin")
add_executable (hello hello.c)

1

ইংরেজি আমার মাতৃভাষা নয়; টাইপিং ত্রুটিগুলি ক্ষমা করুন।

এই লাইন কনফিগারেশনটি ব্যবহার করুন:
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build/)
আপনার যেকোন সিএমকেলিস্ট.সেক্সট প্রকল্প রাখুন।
এই $ {PROJECT_SOURCE_DIR। হল আপনার বর্তমান উত্স ডিরেক্টরি যেখানে প্রকল্পের জায়গা।
এবং যদি ander EC EXECUTABLE_OUTPUT_PATH}
এই ফাইলটি কেন পরীক্ষা করে ঘুরে বেড়ায় CMakeCache.txtতবে কী শব্দটি অনুসন্ধান করুন output path,
সমস্ত ভেরিয়েবলগুলি এখানে সংজ্ঞায়িত করা হয়েছে, এটি সমস্ত প্রকল্পের সম্পূর্ণ ব্যাখ্যা দেবে setting·



0

আমি এটি মুখ্য সিএমকেলিস্ট.টেক্সট বা স্বতন্ত্র ব্যক্তি হিসাবে নির্ধারণ করি না কেন, এটি এখনও ধরে নিয়েছে যে আমি সমস্ত লিবগুলি চাই এবং মূল পথটি বন্ধ করে দেব, যা সবার কমপক্ষে দরকারী অনুমিতি।


0

এটি যোগ করতে:

আপনি যদি ভিজ্যুয়াল স্টুডিও সমাধান উত্পন্ন করতে CMAKE ব্যবহার করে থাকেন এবং আপনি ভিজুয়াল স্টুডিওটি / বিনে সংকলিত ফাইলগুলি আউটপুট করতে চান , পিটারের উত্তরটি কিছুটা সংশোধন করা দরকার:

# set output directories for all builds (Debug, Release, etc.)
foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
    string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
    set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_SOURCE_DIR}/lib )
    set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_SOURCE_DIR}/lib )
    set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_SOURCE_DIR}/bin )
endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.