Я новичок в CMAKE. Ниже приведен простой файл cmake, который хорошо работает в среде mingw windows. Проблема явно связана с функцией target_link_libraries()
CMAKE, где я линкую libwsock32.a. В windows это работает и я получаю результаты.
Однако, как и ожидалось, в Linux, /usr/bin/ld
будет искать -lwsock32
, которого НЕТ в Linux OS.
Моя проблема: как мне указать CMAKE избегать линковки библиотеки wsock32 в Linux OS????
Любая помощь будет высоко оценена.
Мой простой файл CMake:
PROJECT(biourl)
set (${PROJECT_NAME}_headers ./BioSocketAddress.h ./BioSocketBase.h ./BioSocketBuffer.h ./BioSocketCommon.h ./BioSocketListener.h ./BioSocketPrivate.h ./BioSocketStream.h ./BioUrl.h BioDatabase.h )
set (${PROJECT_NAME}_sources BioSocketAddress.C BioSocketBase.C BioSocketCommon.C BioSocketStream.C BioUrl.C BioDatabase.C )
add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_headers} ${${PROJECT_NAME}_sources} )
# linkers
#find_library(ws NAMES wsock32 PATHS ${PROJECT_SOURCE_DIR} NO_SYSTEM_ENVIRONMENT_PATH NO_DEFAULT_PATH)
target_link_libraries(${PROJECT_NAME} bioutils wsock32)
install (TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib/archive )
Я хочу оставить это здесь, потому что я боролся с этим при компиляции для Android в Windows с SDK Android.
CMake различает Целевую и Серверную платформу.
Моей ЦЕЛЬЮ был Android, таким образом, переменные как CMAKE_SYSTEM_NAME имели значение "Android", и переменный WIN32 из другого ответа здесь не был определен. Но я хотел знать, была ли моя Хост-система Windows, потому что я должен был сделать несколько вещей по-другому при компиляции или в Windows или в Linux или iOS. Чтобы сделать это, я использовал CMAKE_HOST_SYSTEM_NAME, который я нашел, едва известен или упоминается где угодно, потому что для большинства людей ЦЕЛЬ и ХОСТ являются тем же, или они не заботятся.
Hope это помогает кому-то где-нибудь...