如何将 `pkg-config --cflags --libs gtk+-2.0` 包含在 CMake 的 CXX_FLAGS 中

5
这是Makefile中的CFLAGS。
CFLAGS = -I/usr/include/libglade-2.0 -I/usr/include/gsl `pkg-config --cflags --libs gtk+-2.0` -lglade-2.0 -lglut -I/usr/local/include/dc1394 -ldc1394

我希望使用CMAKE而不是Makefile。这是我编写的CMakeLists.txt文件的一部分。

find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK REQUIRED "gtk+-2.0")

# Add the path to its header files to the compiler command line
include_directories(${GTK_INCLUDE_DIRS})
link_directories(${GTK_LIBRARY_DIRS})

# Add any compiler flags it requires
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GTK_CFLAGS}")

# Add the makefile target for your executable and link in the GTK library
target_link_libraries(${CMAKE_PROJECT_NAME} ${GTK_LIBRARIES})

# gtk and glade
find_package(GTK2 2.10 REQUIRED gtk glade)
if(GTK2_FOUND)
   include_directories(${GTK2_INCLUDE_DIRS})
   target_link_libraries(${CMAKE_PROJECT_NAME} ${GTK2_LIBRARIES})
endif()

我的问题是如何组合。
`pkg-config --cflags --libs gtk+-2.0` 

在CXX_FLAGS中。我已经搜索了很多,但还是找不到答案。请帮忙。
1个回答

6

如果您正在使用find_package(Gtk2 ...),则根本不需要使用pkg-config。 CMake会为您找到正确的标志。此外,这适用于像Windows这样没有pkg-config的操作系统。

但是,如果您坚持使用pkg-config,请按照以下步骤操作:

find_package(PkgConfig)
if (PKG_CONFIG_FOUND)
  pkg_check_modules(GTK "gtk+-2.0")
  if (GTK_FOUND)    
    target_link_libraries(yourexecutable ${GTK_LIBRARIES})
    add_definitions(${GTK_CFLAGS} ${GTK_CFLAGS_OTHER})
  endif()
endif()

这将把'pkg-config --cflags'的输出添加到您的CXX_FLAGS中,并确保您的可执行文件链接到'pkg-config --libs'中的Gtk2库。
编辑:如果您不介意一些额外的建议,pkg-config提供给您的库不应该在'CFLAGS'中。应该有一个特殊的'LIBS'(或任何类似名称)变量来保存您链接的库。

GTK_CFLAGS 应该包括 "other" 选项,我相信。这与命令行选项 --cflags--cflags-only-I(仅包含目录)和 --cflags-only-other(仅包含非包含标志)相匹配。因此,add_definitions(${GTK_CFLAGS}) 应该足够了。 - AndiDog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接