2010-04-08 12 views
10

एक सेमेक परियोजना में प्रीबिल्ट लाइब्रेरी को शामिल करने का सबसे अच्छा तरीका क्या है? मैं परियोजना मैं पर काम कर रहा हूँ और फ़ाइल संरचना में freetype शामिल करना चाहते हैं इस तरह है:संकलित पुस्तकालयों को जोड़ना और सीएमके परियोजना में फाइलें शामिल करना?

  • बिल्ड
    • MacOS
      • बनाओ/
      • XCode/
    • विंडोज
      • VisualStudio/
  • स्रोत
    • libs
      • MacOS
        • libfreetype
      • विंडोज
        • freetype.dll
      • freetype/(विभिन्न हैडर कि ftbuild.h द्वारा स्वचालित रूप से शामिल किए गए हैं फ़ाइलें)
      • ftbuild.h (यह क्या है शामिल मेरी समझ से कोड में शामिल है।)
    • MyProject
      • main.cpp
      • foo.cpp
      • foo.h

पुस्तकालय पहले से ही संकलित किया गया है। MyProject वर्तमान परियोजना का नाम है।

धन्यवाद! माइक

उत्तर

9

हाल के संस्करणों में पहले से ही फ्रीटाइप खोजने के लिए एक मॉड्यूल है।

INCLUDE(FindFreetype) 
IF(NOT FREETYPE_FOUND) 
    FIND_LIBRARY(FREETYPE_LIBRARIES NAMES libfreetype freetype.dll PATHS "./libs/MacOS" "./libs/Windows" DOC "Freetype library") 
    FIND_PATH(FREETYPE_INCLUDE_DIRS ftbuild.h "./includes" DOC "Freetype includes") 
ENDIF(NOT FREETYPE_FOUND) 
INCLUDE_DIRECTORIES(${FREETYPE_INCLUDE_DIRS}) 
TARGET_LINK_LIBRARIES(MyProject ${FREETYPE_LIBRARIES}) 

आप अपने CMakeLists.txt के सापेक्ष होने के लिए रास्तों को बदलना होगा: यहाँ मैं पूर्व में की गई कुछ ऐसी बातें है।

यह स्निपेट पहले मानक सिस्टम स्थानों में जांच के लिए FindFreetype मॉड्यूल को आमंत्रित करता है।यदि यह वहां लाइब्रेरी को ढूंढने में विफल रहता है, तो यह आपके CMakeLists.txt स्क्रिप्ट के सापेक्ष निर्देशिकाओं की जांच करने के लिए वापस आ जाता है। यदि कि अभी भी विफल रहता है, तो भी आप सामान्य सीएमके UI के माध्यम से स्थानों को सेट या ओवरराइड कर सकते हैं। किसी भी घटना में, यह लिंक करने के लिए शामिल और पुस्तकालयों की सूची में कुछ जोड़ने की कोशिश करता है।

6

बस प्रीबिल्ट lib के पूर्ण पथ के साथ target_link_libraries का उपयोग करें।

तो, कुछ की तरह:

# In the file Source/MyProject/CMakeLists.txt 
add_executable(my_exe main.cpp foo.cpp foo.h) 
if(WIN32) 
    target_link_libraries(my_exe ${CMAKE_CURRENT_SOURCE_DIR}/../libs/Windows/freetype.lib) 
endif() 
if(APPLE) 
    target_link_libraries(my_exe ${CMAKE_CURRENT_SOURCE_DIR}/../libs/MacOS/libfreetype.a) 
endif() 
संबंधित मुद्दे