4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

グラフィック系のライブラリを用いたC言語のプログラムをコンパイルする際のCMakeLists.txtの記述について(gccのコマンド付き)

Last updated at Posted at 2015-05-23

グラフィック系のライブラリを用いたC言語のプログラムをコンパイルする際のCMakeLists.txt(CMakeのコンパイル設定ファイル)の記述についてまとめてみます(gccでコンパイルするという人にも役立つ記事となっております)。

#検証環境
以下の環境にて検証を行っております。

  • Ubuntu 14.04 LTS
    • CMake 2.8
    • CLion 1.0.3(CMake 3.2 使用)

#X Window System(X11) (+Xpm)を使用する場合
##gccのコマンド

パターン コマンド
X Window System(X11)のみ gcc -Wall -o <実行ファイル名> <ソースファイル名> -lX11
X Window System(X11) + Xpm gcc -Wall -o <実行ファイル名> <ソースファイル名> -lX11 -lXpm

##CMakeLists.txtの記述
###全体の記述

CMakeLists.txtの記述 内容
find_package(X11) X Window System(X11)のパッケージを参照します。

###コンパイル対象ごとの記述

CMakeLists.txtの記述 gccのオプション 内容
add_executable(<実行ファイル名> <ソースファイル名>) -o <実行ファイル名> <ソースファイル名> 実行ファイル名とソースファイル名の対応関係を登録します。
target_link_libraries(<実行ファイル名> Xpm) -lXpm 実行ファイルとXpmのライブラリをリンクさせます__(Xpmを使用する場合のみ)__。
target_link_libraries(<実行ファイル名> ${X11_LIBRARIES}) -lX11 実行ファイルとX Window System(X11)のライブラリをリンクさせます。

##余談

  • XpmをUbuntuで使う場合、sudo apt-get install libxpm-devでライブラリをインストールせねばなりません。
  • Xpmを使用する場合、X11/xpm.hをインクルードしておけば、(X11/Xlib.h等のインクルードなしで、)X Window System(X11)の関数を使用することができます。

#GTK2を使用する場合
##gccのコマンド
gccでコンパイルする際には、どちらのパターンでも構いませんが、この記事では、パターン1の記述を元に説明していきます。

パターン コマンド
1 gcc -Wall -o <実行ファイル名> <ソースファイル名> $(pkg-config --cflags gtk+-2.0) $(pkg-config --libs gtk+-2.0)
2 gcc -Wall -o <実行ファイル名> <ソースファイル名> $(pkg-config --cflags --libs gtk+-2.0)

##CMakeLists.txtの記述
###全体の記述

CMakeLists.txtの記述 gccのオプション 内容
find_package(GTK2) GTK2のパッケージを参照します。
include_directories(${GTK2_INCLUDE_DIRS}) $(pkg-config --cflags gtk+-2.0) GTK2のインクルードパスを指定します。

###コンパイル対象ごとの記述

CMakeLists.txtの記述 gccのオプション 内容
add_executable(<実行ファイル名> <ソースファイル名>) -o <実行ファイル名> <ソースファイル名> 実行ファイル名とソースファイル名の対応関係を登録します。
target_link_libraries(<実行ファイル名> ${GTK2_LIBRARIES}) $(pkg-config --libs gtk+-2.0) 実行ファイルとGTK2のライブラリをリンクさせます。

#math.h や tgmath.hを使用する場合
##gccのコマンド

コマンド
gcc -Wall -o <実行ファイル名> <ソースファイル名> -lm

##CMakeLists.txtの記述
###コンパイル対象ごとの記述

CMakeLists.txtの記述 gccのオプション 内容
add_executable(<実行ファイル名> <ソースファイル名>) -o <実行ファイル名> <ソースファイル名> 実行ファイル名とソースファイル名の対応関係を登録します。
target_link_libraries(<実行ファイル名> m) -lm 実行ファイルとmath.h や tgmath.hのライブラリをリンクさせます。

##余談

  • tgmath.hは、C99で定められた計算用ライブラリで、インクルードすると、math.h と complex.hも同時にインクルードされます。
    複素数も扱えるようになるという画期的なライブラリですが、扱い方が少々難しい印象があります......。

#OpenGL + glutを使用する場合
##gccのコマンド

パターン コマンド
(glutで始まる関数を除く)gluで始まる関数が使われていない gcc -Wall -o <実行ファイル名> <ソースファイル名> -lGL -lglut
(glutで始まる関数を除く)gluで始まる関数が使われている gcc -Wall -o <実行ファイル名> <ソースファイル名> -lGL -lGLU -lglut

##CMakeLists.txtの記述
###全体の記述

CMakeLists.txtの記述 内容
find_package(GLUT) glutのパッケージを参照します。
find_package(OpenGL) OpenGLのパッケージを参照します。

###コンパイル対象ごとの記述

CMakeLists.txtの記述 gccのオプション 内容
add_executable(<実行ファイル名> <ソースファイル名>) -o <実行ファイル名> <ソースファイル名> 実行ファイル名とソースファイル名の対応関係を登録します。
target_link_libraries(<実行ファイル名> ${GLUT_LIBRARY}) -lglut 実行ファイルとglutのライブラリをリンクさせます。
target_link_libraries(<実行ファイル名> ${OPENGL_LIBRARY}) -lGL -lGLU 実行ファイルとOpenGLのライブラリをリンクさせます。

##余談

#これらを記述したCMakeLists.txtの例
__プロジェクトCG__というC言語のプロジェクトがあり、その中に以下のコンパイル対象があるとします。

実行ファイル名 ソースファイル名 内容
CG1 CG1.c X Window System(X11) + Xpm使用。
CG2 CG2.c GTK2 と math.h使用。
CG3 CG3.c OpenGL + glut使用。

その際、CMakeLists.txtは次のようになります。

CMakeLists.txt
cmake_minimum_required(VERSION 2.8) #実行できるCMakeのバージョンをver 2.8以降に設定
project(CG C) #プロジェクトCGをC言語のプロジェクトとして生成(Cと書かないと、C++のプロジェクトになります)

add_definitions(-Wall) #警告を全て表示するように設定
find_package(X11)
find_package(GTK2)
find_package(GLUT)
find_package(OpenGL) 
include_directories(${GTK2_INCLUDE_DIRS})

#実行ファイルCG1(X Window System(X11) + Xpm使用)
add_executable(CG1 CG1.c)
target_link_libraries(CG1 Xpm)
target_link_libraries(CG1 ${X11_LIBRARIES})

#実行ファイルCG2(GTK2 と math.h使用)
add_executable(CG2 CG2.c)
target_link_libraries(CG2 m)
target_link_libraries(CG2 ${GTK2_LIBRARIES})

#実行ファイルCG3(OpenGL + glut使用)
add_executable(CG3 CG3.c)
target_link_libraries(CG3 ${GLUT_LIBRARY})
target_link_libraries(CG3 ${OPENGL_LIBRARY})

#関連記事

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?