如何使用CMake添加编译器参数?

雪莱尔贝克

我一直在使用Clion IDE,并试图获取一个简单的GTK程序来使用它进行编译。我发现Clion使用CMake,所以问题出在这里,而不是IDE本身。我能够直接从终端成功编译并运行该程序,但使用CMake失败。

这个问题很简单:当我尝试编译,编译器找不到gtk.h,它位于/usr/include/gtk-3.0/gtk/gtk.h我发现命令编译器参数以某种方式'pkg-config --libs --cflags gtk+-3.0'解决了此问题,但是我无法使用CMake添加此参数。

我试过了:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} `pkg-config --libs --cflags gtk+-3.0`")

但是遇到了:

Linking CXX executable test
c++: error: `pkg-config: No such file or directory
c++: error: gtk+-3.0`: No such file or directory
c++: error: unrecognized command line option ‘--libs’
c++: error: unrecognized command line option ‘--cflags’
make[3]: *** [test] Error 1
make[2]: *** [CMakeFiles/test.dir/all] Error 2
make[1]: *** [CMakeFiles/test.dir/rule] Error 2
make: *** [test] Error 2

有什么建议?


进一步的研究发现教程正是针对我所遇到的问题。它的工作原理很像魅力,但似乎将许多看似未定义的变量加入了混合。谁能解释这是如何以及为什么起作用的?

# Set the name and the supported language of the project
project(hello-world C)
# Set the minimum version of cmake required to build this project
cmake_minimum_required(VERSION 2.6)
# Use the package PkgConfig to detect GTK+ headers/library files
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
# Setup CMake to use GTK+, tell the compiler where to look for headers
# and to the linker where to look for libraries
include_directories(${GTK3_INCLUDE_DIRS})
link_directories(${GTK3_LIBRARY_DIRS})
# Add other flags to the compiler
add_definitions(${GTK3_CFLAGS_OTHER})
# Add an executable compiled from hello.c
add_executable(hello main.c)
# Link the target to the GTK+ libraries
target_link_libraries(hello ${GTK3_LIBRARIES})
kdopen

使用FindPkgConfig模块

cmake_minimum_required(VERSION <your cmake version>)
project(myproject CXX)

# Find the GTK module using pkg-config
include(FindPkgConfig)
pkg_check_modules(GTK REQUIRED "gtk+-3.0")

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

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

# Add the makefile target for your executable and link in the GTK library
add_executable(${CMAKE_PROJECT_NAME} <list of source files>)    
target_link_libraries(${CMAKE_PROJECT_NAME} ${GTK_LDFLAGS} <other libraries>)

人字形(<...>)中的位需要替换为实数值

你可以找到更多

cmake --help-module FindPkgConfig

基本上,该include(FindPkgConfig)行引入了一些宏-它还确保pkg-config在环境中可用。然后,调用将pkg_check_modules有效运行pkg-config,解析输出并使用第一个参数作为词干创建一组变量。

在帮助中,这是一个基本列表(XPREFIX通常是您提供的词干)

      <XPREFIX>_FOUND          ... set to 1 if module(s) exist
      <XPREFIX>_LIBRARIES      ... only the libraries (w/o the '-l')
      <XPREFIX>_LIBRARY_DIRS   ... the paths of the libraries (w/o the '-L')
      <XPREFIX>_LDFLAGS        ... all required linker flags
      <XPREFIX>_LDFLAGS_OTHER  ... all other linker flags
      <XPREFIX>_INCLUDE_DIRS   ... the '-I' preprocessor flags (w/o the '-I')
      <XPREFIX>_CFLAGS         ... all required cflags
      <XPREFIX>_CFLAGS_OTHER   ... the other compiler flags



      <XPREFIX> = <PREFIX>        for common case
      <XPREFIX> = <PREFIX>_STATIC for static linking

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何指示CMake不要合并编译器参数?

来自分类Dev

cmake:如何根据当前编译器版本添加编译器标志

来自分类Dev

如何使用传递给编译器的相同参数在cmake中运行命令?

来自分类Dev

使用VisualD向编译器添加-unittest参数

来自分类Dev

如何使CMake在系统PATH上使用默认编译器?

来自分类Dev

使用32或64编译器的CMake

来自分类Dev

如何在使用CMake进行编译时修复“ CXX编译器的未知功能”(Linux Mint)

来自分类Dev

如何在Windows下使用cmake生成使用Intel编译器的Visual Studio项目

来自分类Dev

如何将多个编译器参数添加到meson.build

来自分类Dev

使用VisualD将-unittest参数添加到编译器

来自分类Dev

使用Android Gradle插件进行编译时如何添加Java编译器选项?

来自分类Dev

使用特定的编译器参数编译Cython

来自分类Dev

使用cmake,如何确定每种构建类型的默认编译器标志?

来自分类Dev

如何指示CMake使用构建体系结构编译器

来自分类Dev

如何使用Visual c ++编译器为Boost 1.39.0构建库运行Cmake

来自分类Dev

如何通过 CMake 传递编译器标志以使用 GTest

来自分类Dev

如何为CMAKE外部项目指定编译器?

来自分类Dev

如何在cmake中自动查找编译器路径?

来自分类Dev

Qt Creator使用MinGW编译器和CMake

来自分类Dev

使用cmake传递复合编译器选项

来自分类Dev

使用CMake GUI设置交叉编译器文件

来自分类Dev

XCode编译器错误,使用CMake构建的项目

来自分类Dev

使用cmake传递复合编译器选项

来自分类Dev

java如何使用编译器

来自分类Dev

如何避免“需要非空的情况下使用空参数”编译器警告

来自分类Dev

PHPstorm 7-如何使用我的命令设置闭包编译器参数?

来自分类Dev

在某些情况下使用模板参数时,编译器如何生成函数的实例?

来自分类Dev

编译器如何不使用size参数处理此模板化函数

来自分类Dev

Qt添加编译器

Related 相关文章

  1. 1

    如何指示CMake不要合并编译器参数?

  2. 2

    cmake:如何根据当前编译器版本添加编译器标志

  3. 3

    如何使用传递给编译器的相同参数在cmake中运行命令?

  4. 4

    使用VisualD向编译器添加-unittest参数

  5. 5

    如何使CMake在系统PATH上使用默认编译器?

  6. 6

    使用32或64编译器的CMake

  7. 7

    如何在使用CMake进行编译时修复“ CXX编译器的未知功能”(Linux Mint)

  8. 8

    如何在Windows下使用cmake生成使用Intel编译器的Visual Studio项目

  9. 9

    如何将多个编译器参数添加到meson.build

  10. 10

    使用VisualD将-unittest参数添加到编译器

  11. 11

    使用Android Gradle插件进行编译时如何添加Java编译器选项?

  12. 12

    使用特定的编译器参数编译Cython

  13. 13

    使用cmake,如何确定每种构建类型的默认编译器标志?

  14. 14

    如何指示CMake使用构建体系结构编译器

  15. 15

    如何使用Visual c ++编译器为Boost 1.39.0构建库运行Cmake

  16. 16

    如何通过 CMake 传递编译器标志以使用 GTest

  17. 17

    如何为CMAKE外部项目指定编译器?

  18. 18

    如何在cmake中自动查找编译器路径?

  19. 19

    Qt Creator使用MinGW编译器和CMake

  20. 20

    使用cmake传递复合编译器选项

  21. 21

    使用CMake GUI设置交叉编译器文件

  22. 22

    XCode编译器错误,使用CMake构建的项目

  23. 23

    使用cmake传递复合编译器选项

  24. 24

    java如何使用编译器

  25. 25

    如何避免“需要非空的情况下使用空参数”编译器警告

  26. 26

    PHPstorm 7-如何使用我的命令设置闭包编译器参数?

  27. 27

    在某些情况下使用模板参数时,编译器如何生成函数的实例?

  28. 28

    编译器如何不使用size参数处理此模板化函数

  29. 29

    Qt添加编译器

热门标签

归档