2015-09-10 60 views
4

這是Makefile中的CFLAGS。如何在CMake的CXX_FLAGS中包含`pkg-config --cflags --libs gtk + -2.0`

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結合起來。我搜查了很多,但找不到答案。請幫忙。

回答

3

如果您使用的是find_package(Gtk2 ...),則根本不需要使用pkg-config。 CMake會爲你找到正確的標誌。另外,這適用於Windows等操作系統,其中pkg-config不存在。

但是,如果你堅持要用pkg配置,請執行下列操作:

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配置--cflags」到您的CXX_FLAGS輸出,並還可以確保你的可執行文件鏈接從'pkg-config --libs'對Gtk2庫進行編碼

編輯:如果您不介意一些額外的建議,那麼pkg-config爲您提供的庫不屬於'CFLAGS'。應該有一個特殊的'LIBS'(或任何類似的名字)變量來存放你鏈接的庫。