के साथ बिल्डिंग लाइब्रेरी मैं आपको सभी को परेशान करने के लिए क्षमा चाहता हूं, लेकिन मेरे पास सेमेक के साथ थोड़ा संकलन समस्या है।सेमीकेक
मेरे पास एक CMakeLists.txt फ़ाइल है जिसका उपयोग मैं परीक्षण निष्पादन योग्य और साझा लाइब्रेरी बनाने के लिए कर रहा हूं। दोनों की एक और पुस्तकालय (एसएफएमएल) पर निर्भरता है।
मैं मिनीजीडब्ल्यू के साथ खिड़की पर सेमेक का उपयोग कर रहा हूं।
मुझे पता है कि मैं जिस lib का निर्माण कर रहा हूं उसका नाम एसएफएमएल के साथ भ्रमित है, लेकिन यह एक एसएफएमएल रैपर होने वाला है, इसलिए, मुझे एक बेहतर नाम नहीं मिला!
यहाँ CMakeLists.txt
cmake_minimum_required(VERSION 2.6)
project(projectName)
set(EXECUTABLE_NAME testSFML)
set(LIBRARY_NAME SFMLwindow)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin/)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include/
${CMAKE_CURRENT_SOURCE_DIR}/../../include
)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../lib/)
file(
GLOB_RECURSE
SRC_FILES
src/*
)
file(
GLOB_RECURSE
INCLUDE_FILES
include/*
)
add_executable(
${EXECUTABLE_NAME}
main.cpp
${SRC_FILES}
${INCLUDE_FILES}
)
target_link_libraries(
${EXECUTABLE_NAME}
sfml-main
sfml-system
sfml-window
)
add_library(
${LIBRARY_NAME}
SHARED
${SRC_FILES}
)
और क्या मैं टर्मिनल में मिलती है:
"C:\MinGW\bin\mingw32-make.exe"
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/iksemel/docs/WorkBench/programming/projets/TestSFML/cmake
Linking CXX shared library libSFMLwindow.dll
Creating library file: libSFMLwindow.dll.a
CMakeFiles\SFMLwindow.dir/objects.a(SFMLWindow.cpp.obj):SFMLWindow.cpp:(.text+0x59):undefined reference to `_imp___ZN2sf9VideoModeC1Ejjj'
CMakeFiles\SFMLwindow.dir/objects.a(SFMLWindow.cpp.obj):SFMLWindow.cpp:(.text+0xda): undefined reference to `_imp___ZN2sf6WindowC1ENS_9VideoModeERKSsjRKNS_15ContextSettingsE'
CMakeFiles\SFMLwindow.dir/objects.a(SFMLWindow.cpp.obj):SFMLWindow.cpp:(.text+0x163): undefined reference to `_imp___ZN2sf6Window5closeEv'
CMakeFiles\SFMLwindow.dir/objects.a(SFMLWindow.cpp.obj):SFMLWindow.cpp:(.text+0x1bd): undefined reference to `_imp___ZN2sf6Window9pollEventERNS_5EventE'
CMakeFiles\SFMLwindow.dir/objects.a(SFMLWindow.cpp.obj):SFMLWindow.cpp:(.text+0x1d8): undefined reference to `_imp___ZN2sf6Window7displayEv'
collect2: ld a retourné 1 code d'état d'exécution
mingw32-make.exe[2]: *** [libSFMLwindow.dll] Error 1
mingw32-make.exe[1]: *** [CMakeFiles/SFMLwindow.dir/all] Error 2
mingw32-make.exe: *** [all] Error 2
तो किसी को क्या हो रहा है पर एक सुराग है, मैं बहुत gratefull होगी!
सहायता के लिए धन्यवाद, मैंने अपने CMakeLists.txt को संपादित किया, लेकिन यह अभी तक काम नहीं कर रहा है। लेकिन अजीब बात यह है कि, अगर मैं केवल निष्पादन योग्य बना रहा हूं, तो यह ठीक काम करता है, यह केवल तब होता है जब पुस्तकालय का निर्माण होता है जिसे मैं इस समस्या का सामना कर रहा हूं। और .o फाइलें बनने लगती हैं क्योंकि वे होना चाहिए। मेरा CmakeLists.txt अब: http://pastebin.com/hLux8Lvi – Cuthalion
मुझे समस्या का पता चला! आप लिंकिंग समस्या के बारे में सही थे, लेकिन इसे सही करने के लिए, मुझे 2 target_link_libraries का उपयोग करना पड़ा। एक निष्पादन योग्य और पुस्तकालय के लिए दूसरा एक। मेरी दूसरी समस्या कमांड ऑर्डर थी। ऐसा लगता है कि * target_link_libraries * add_executable और add_library के बाद दिखाई देना चाहिए। यहां मेरा वर्तमान सेमेक है, और फिर, cmake के बारे में सामान्य जानकारी के लिए धन्यवाद और मेरी मदद करो! http://pastebin.com/ErgbGir0 – Cuthalion
ठीक है - यह काम करता है खुश है। हमारे समाधानों के बीच मुख्य अंतर यह है कि आप स्रोतों को पुस्तकालय * और * exe दोनों में संकलित करते हैं। यह छोटी परियोजनाओं के लिए ठीक है, लेकिन यदि आपके पास बहुत सारी स्रोत फाइलें हैं तो दर्द हो जाता है। आम तौर पर, आप केवल लाइब्रेरी में स्रोतों को संकलित करेंगे, फिर उस लाइब्रेरी को टेस्ट एक्सई से लिंक करें।सीएमके के साथ, यदि आप निर्दिष्ट करते हैं कि lib ए lib पर निर्भर करता है, और exe Z lib ए पर निर्भर करता है, तो यह स्वचालित रूप से ज़ेड की निर्भरता के रूप में lib B को भी जोड़ता है। यही कारण है कि मैंने '$ {LIBRARY_NAME}' को '$ {EXECUTABLE_NAME}' की निर्भरता के रूप में निर्दिष्ट किया है। हालांकि कोई बड़ी बात नहीं :-) – Fraser