Добрый день всем! Есть простенькое графическое приложение, которое без проблем собирается вызовом:
x86_64-w64-mingw32-c++ sailboat.c -o sailboat.exe -lglfw3dll -lglfw3 -static-libgcc -static-libstdc++ -lopengl32 -Wl,--subsystem,windows
Однако, если использовать CMake:
cmake_minimum_required(VERSION 3.0) # Проверка версии CMake.
set (PROJECT sailboat) # Название проекта
project(${PROJECT})
set(OpenGL_GL_PREFERENCE LEGACY)
find_package(OpenGL REQUIRED)
find_package(glfw3 REQUIRED)
include_directories(${OPENGL_INCLUDE_DIR})
find_library(PTHREAD_LIB pthread)
# Установка переменной со списком исходников для исполняемого файла
#set (SOURCES gl_core_4_3.c)
#set (HEADERS gl_core_4_3.h)
set (LIBS ${LIBS} ${OPENGL_LIBRARY} ${GLFW_LIBRARIES} )
set (MINGW=ON)
set (CMAKE_SYSTEM_NAME=Windows)
#set_target_properties (${PROJECT} PROPERTIES CMAKE_WIN32_EXECUTABLE True)
set( CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "" )
set( CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "" )
set (BUILD_SHARED_LIBS=OFF)
set (BUILD_CLAR=OFF)
set (THREADSAFE=ON)
set (CMAKE_C_COMPILER /usr/bin/x86_64-w64-mingw32-c++)
set (CMAKE_CXX_COMPILER /usr/bin/x86_64-w64-mingw32-c++)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static")
set(CMAKE_LIBRARY_PATH /usr/x86_64-w64-mingw32/lib)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--subsystem,windows")
add_executable (${PROJECT} WIN32 ${HEADERS} ${SOURCES} sailboat.c) # Создает исполняемый файл с именем PROJECT
set_target_properties (${PROJECT} PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:windows")
set_target_properties (${PROJECT} PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:windows")
#set(CMAKE_EXE_LINKER_FLAGS "-static -static-libgcc -static-libstdc++ -lglfw3dll")
target_include_directories(${PROJECT} PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
$<INSTALL_INTERFACE:include>)
# Линковка программы с библиотеками
#target_link_libraries( PUBLIC glfw ${PTHREAD_LIB} )
target_link_libraries(${PROJECT} PUBLIC ${OPENGL_gl_LIBRARY} glfw)
[ 50%] Linking C executable sailboat
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lGL
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lrt
/usr/bin/x86_64-w64-mingw32-ld: cannot find -ldl
/usr/bin/x86_64-w64-mingw32-ld: cannot find -lX11
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/sailboat.dir/build.make:89: sailboat] Error 1
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/sailboat.dir/all] Error 2
make: *** [Makefile:84: all] Error 2
Вообще-то линкер не должен требовать этих библиотек для сборки для Windows. В чем причина?
PS Извините, я новичок в CMake, поэтому CMakeLists.txt такой сумбурный.