在Windows上使用CMake构建GTK +应用程序

时间:2017-07-13 22:35:05

标签: windows cmake gtk3 mingw-w64

我正在尝试使用CMake在Windows(64位)上构建一个简单的GTK +应用程序。我根据official guide安装了所有内容。

以下是 CMakeLists.txt 的内容:

# Set project
project(gtk-test C)
cmake_minimum_required(VERSION 3.0)

# Configure project paths
set(PROJECT_SOURCE_DIR ${PROJECT_SOURCE_DIR}/src)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)

# Find dependencies
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
include_directories(${GTK3_INCLUDE_DIRS})
link_directories(${GTK3_LIBRARY_DIRS})
add_definitions(${GTK3_CFLAGS_OTHER})
set(LIBRARIES ${LIBRARIES} ${GTK3_LIBRARIES})

# Compile
add_executable(main ${PROJECT_SOURCE_DIR}/main.c)
target_link_libraries(main ${LIBRARIES})

# Messages
message(STATUS "GTK include directories: ${GTK3_INCLUDE_DIRS}")

然后我用以下内容构建源文件:

cmake -Bbuild -H.
cmake --build build 

在macOS上似乎一切正常,但在Windows上我一直收到以下错误:

 fatal error: gtk/gtk.h: No such file or directory
 #include <gtk/gtk.h>

我检查了CMake包含的目录,并且头文件 。此外,tutorial中的以下命令成功构建了应用程序:

gcc `pkg-config --cflags gtk+-3.0` -o main.exe main.c `pkg-config --libs gtk+-3.0`

不过,我真的很想让它与CMake合作。我一直在寻找解决方案几个小时没有结果,所以任何帮助都将受到高度赞赏 提前谢谢!

更新

显然,整个问题都在于包含的库中。由于某种原因,行:

include_directories(${GTK3_INCLUDE_DIRS})

不包含它们。我设法使用-I选项修复了问题,包括库:

# Set project
cmake_minimum_required(VERSION 3.0)
project(gtk-test C)

# Configure project paths
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)
set(CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR}/src)

# Find dependencies
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
link_directories(${GTK3_LIBRARY_DIRS})
add_compile_options(${GTK3_CFLAGS_OTHER})
set(LIBRARIES ${LIBRARIES} ${GTK3_LIBRARIES})

set(FLAGS "-I${GTK3_INCLUDE_DIRS}")
message(STATUS "Flags: ${FLAGS}")
string(REPLACE ";" " -I" FLAGS "${FLAGS}")
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} ${GTK3_FLAGS} ${FLAGS})

# Compile
add_executable(main ${PROJECT_SOURCE_DIR}/main.c)
target_link_libraries(main ${LIBRARIES})

虽然它似乎有用,但对我来说这似乎不是一个好的解决方案。

0 个答案:

没有答案