উত্তর:
@ ম্যানুয়েল সেখানে অংশ ছিল। আপনি এই সংকলক বিকল্পটিও যুক্ত করতে পারেন:
আপনার যদি সিএমকে ৩.১.০+ থাকে তবে এটি আরও সহজ হয়ে যায় :
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries(my_app PRIVATE Threads::Threads)
আপনি যদি সিএমকে ২.৮.১২+ ব্যবহার করছেন তবে আপনি এটিকে সহজ করতে পারবেন:
find_package(Threads REQUIRED)
if(THREADS_HAVE_PTHREAD_ARG)
target_compile_options(my_app PUBLIC "-pthread")
endif()
if(CMAKE_THREAD_LIBS_INIT)
target_link_libraries(my_app "${CMAKE_THREAD_LIBS_INIT}")
endif()
পুরানো সিএমকে সংস্করণগুলির প্রয়োজন হতে পারে:
find_package(Threads REQUIRED)
if(THREADS_HAVE_PTHREAD_ARG)
set_property(TARGET my_app PROPERTY COMPILE_OPTIONS "-pthread")
set_property(TARGET my_app PROPERTY INTERFACE_COMPILE_OPTIONS "-pthread")
endif()
if(CMAKE_THREAD_LIBS_INIT)
target_link_libraries(my_app "${CMAKE_THREAD_LIBS_INIT}")
endif()
আপনি যদি সিএমকে ৩.১++ দিয়ে প্রথম দুটি পদ্ধতির একটি ব্যবহার করতে চান তবে আপনাকেও set(THREADS_PREFER_PTHREAD_FLAG ON)
সেখানে প্রয়োজন হবে।
NOT CMAKE_HAVE_THREADS_LIBRARY
), যেমন উবুন্টু 15.04 :(
/usr/share/cmake-2.8/Modules/FindThreads.cmake
(যেমন উদাহরণস্বরূপ দেখুন এখানে দেখুন- apt-browse.org/browse/ubuntu/trusty/main/all/cmake-data/… ) মূলত, THREADS_HAVE_PTHREAD_ARG
শুধুমাত্র সেট করা হয় যদি পতাকার অন্যান্য বৈচিত্র পাওয়া যায়নি (অর্থাত। -lpthread
, -lpthread
অথবা -lthread
)
নিম্নলিখিতগুলি পরিষ্কার (ব্যবহার করে find_package
) এবং কাজ করা উচিত (সন্ধানের মডিউলটি বলা হয় FindThreads
):
cmake_minimum_required (VERSION 2.6)
find_package (Threads)
add_executable (myapp main.cpp ...)
target_link_libraries (myapp ${CMAKE_THREAD_LIBS_INIT})
এখানে ডান আনসারটি রয়েছে:
ADD_EXECUTABLE(your_executable ${source_files})
TARGET_LINK_LIBRARIES( your_executable
pthread
)
সমতুল্য
-lpthread
target_link_libraries(target "$<$<CXX_COMPILER_ID:GNU>:-pthread>$<$<CXX_COMPILER_ID:Clang>:-pthreads>")
যা অন্তত লক্ষ্য-ভিত্তিক এবং উইন্ডোজ এবং অন্যান্য প্ল্যাটফর্মগুলিতে ব্যর্থ হয় না।