سؤال

أنا استخدم لإدارة مباني منصة عبر منصة، ولدي كل شيء يعمل باستثناء هذه المشكلة. أضبط RUNTIME_OUTPUT_DIRECTORY إلى أ bin/ الدليل حيث لدي ملفات البيانات المخزنة. على لينكس، هذا يعمل بشكل جيد. على Windows، يتم وضع الملفات التنفيذية في Debug/Release الدليل الفرعي اعتمادا على نوع البناء. هل هناك أي طريقة للحصول عليها لنسخ الملف القابل للتنفيذ إلى الدليل المناسب، أو (أفضل) التوقف عن استخدام هذه الدلائل الفرعية تماما؟

هل كانت مفيدة؟

المحلول

لقد كنت أستخدم خاصية Prefix Prefix Hack ogapo. لسنوات. إنها تعمل.

ولكن اعتبارا من الإصدار 2.8 CMAKE، يوجد دعم رسمي لتجنب الدلائل الفرعية للإصدار / التصحيح على Windows.

استخدام إما العالمية CMAKE_<ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION> المتغيرات، أو الهدف لكل هدف <ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION> العقارات، مثل ذلك:

SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}")
SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}")
SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}")
SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}")
SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}")
SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}")

نصائح أخرى

لست متأكدا مما إذا كانت هذه الدلائل متعمدة أو علة، ولكن في خطر عدم توافقي الأمام، يمكنك إضافة:

if (MSVC_IDE)
    # hack to get around the "Debug" and "Release" directories cmake tries to add on Windows
    set_target_properties (${NAME} PROPERTIES PREFIX "../")
endif()

هذا يعمل بالنسبة لي

لقد وجدت بعض المناقشات الجيدة حول هذا الموضوع:

http://www.cmake.org/pipermail/cmake/2008-april/021355.html.

http://www.vtk.org/bug/bug_view_advanced_page.php؟bug_id=8366.

هل سيكون من الممكن استخدام إهمال exectable_output_path. بدلا من Runtime_Output_Directory.ب لست متأكدا من أن الوظيفة التي تغيرت بين 2، لكن قد يستحق المحاولة.

بعض متغيرات CMAKE جعل إصدارات محددة.

CMAKE_C_FLAGS 
    the compiler flags for compiling C sources. Note you can also specify switches with ADD_DEFINITIONS(). 
CMAKE_C_FLAGS_DEBUG 
    compiler flags for compiling a debug build from C sources. 
CMAKE_C_FLAGS_RELEASE 
    compiler flags for compiling a release build from C sources. 
CMAKE_C_FLAGS_RELWITHDEBINFO 
    compiler flags for compiling a release build with debug flags from C sources. 

لم أتحقق من هذه الفوارج موجودة، ولكن ربما الإعداد RUNTIME_OUTPUT_DIRECTORY_DEBUG && RUNTIME_OUTPUT_DIRECTORY_RELEASE إلى نفس الشيء قد يعمل.

حتى الآن، أفضل إجابة وجدت هي ببساطة الكتابة cmake تثبيت أوامر لكل من أهدافي وملفات البيانات الخاصة بي، وإعداد مصحح الأخطاء MSVC للخروج من دليل التثبيت. هذا لديه فائدة إضافية لاستخدام CPACK لإنشاء مثبتات.

بالنسبة لي عالمي:

set(CMAKE_STATIC_LIBRARY_PREFIX "../lib")
set(CMAKE_SHARED_LIBRARY_PREFIX "../lib")

فعلت العمل، لذلك ليس لدي لتعيينها لكل مكتبة (cmake 2.8.4)

تحتاج إلى تغيير موقع Build لمشاريع Visual Studio الخاصة بك. انتقل إلى خصائص المشروع وعلى علامة تبويب ترجمة "بناء مسار الإخراج" لتكون أينما كنت ترغب في ذلك.

ملحوظة

لا أعرف مدى أهمية ذلك كما لا أعرف عن cmake.

يمكنك استخدام الرمز المميز التالي في أحداث بناء Visual Studio:

$(TargetPath)

سيكون هذا المسار إلى الموقع الذي تم تصميمه لمشروعك بذلك اعتمادا على إعدادات المشروع الخاصة بك سيكون إما مجلد Debug أو Release.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top