質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ビルド

ソースコードを単体で実行可能なソフトウェアへ変換する過程をビルド(build)と呼びます

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1135閲覧

CMakeLists.txtを使ったビルドについて

ar3qna

総合スコア14

CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ビルド

ソースコードを単体で実行可能なソフトウェアへ変換する過程をビルド(build)と呼びます

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2020/08/20 08:50

前任者がubuntuサーバの中に設置してあるC言語で作った(であろう)コードがあり、
これを修正したいと思います。

C言語なんじゃないかとおもったのは、xxxxx.c,xxxxx.hというファイルがあるからです。

コードも見ればある程度は読めるので、ここを修正すれば良さそうだなというのはわかったのですが、ビルドがいまいちわかっていません。
ビルドが必要な言語を使ったことがほぼありません。phpは10年以上使ってます。

同じディレクトリの中にCMakeLists.txtというのがあり、ググったところこれにビルドの内容が書いてあるのだろうと予想しました。
そうすると、CMakeLists.txtのあるパスでcmakeコマンド叩けばいいのかなとも考えましたが、ビルド用のディレクトリが必要であるという情報もありました。

そうするとCMakeLists.txtがあるパスで
mkdir build
cd build
cmake
make
とすればいいのでしょうか?

ちなみにこうすると、
cmakeからみたら、CMakeLists.txtは一つ上のディレクトリにあることになる思いますが、それでいいのですか?

また、ちょっと修正して再度動きを見たい場合は、またcmake→make
とする必要がありますか?
buildディレクトリは777にしておいて上書き?させていいものですか?

CMakeLists.txtの中に以下のような記述がありまして、以下のような記述があり、このinstallというのはビルド先なのか?思っていますがいかがでしょうか?
install(TARGETS ${moduleName} DESTINATION ${LIBRARY_DIR})

作業マシンはMacなのですが、もしかしてMacにVisualStudioとかをインストールしてローカルでビルドしたりするものなのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Cmakeはmakeの完全上位互換です。いろんなビルドシステムに対応させるために開発されました。
Cmakeの役割は2種類あります。
1.各種ビルド環境を作成することです。
CMakeLists.txtを作成し、ファイルの依存関係を記述します。
cmake -S <一番上のCMkeLists.txtのPATH> -B <ビルドディレクトリへのPATH>
*CMakeLists.txtはプロジェクト次第で、各サブディレクトリにもツリー状に配置されていることがあります。

2.ビルドを実行すること。
Cmakeはmakefileを作成します。
Cmakeはオプション次第でVisualStudioのプロジェクトを作成することもできます。
Cmakeはmakeよりも早いとされているNinjaビルドを作成します。
cmake --build <ビルドディレクトリへのPATH>
または、make ninja VisualStudio等

Cmakeはドキュメントが整備されていますので、
https://cmake.org/cmake/help/latest/manual/cmake.1.html
を参照してください。

投稿2020/08/20 10:45

bjnes

総合スコア113

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

CMakeLists.txtは一つ上のディレクトリにあることになる思いますが、それでいいのですか?

1つ上のディレクトリにあるのであれば、cmake .. となると思います。

python

1mkdir build 2cd build 3cmake .. 4make 5make install

ちょっと修正して再度動きを見たい場合は、またcmake→make

既存のソース変更であれば、cmake は一回だけで、以降は make だけでいいです。
.c、.h ファイルを追加したりした場合、CMakeLists.txt の編集が必要です。

install(TARGETS ${moduleName} DESTINATION ${LIBRARY_DIR})

インストール先の設定です。
make install したときに、バイナリが ${LIBRARY_DIR} に配置されます。

作業マシンはMacなのですが、もしかしてMacにVisualStudioとかをインストールしてローカルでビルドしたりするものなのでしょうか?

ssh 等で Linux 上で作業しているのであれば、Linux 上でビルドします。
逆に Mac でビルドしたものを Linux に持っていっても OS が違うので動きません。

投稿2020/08/20 09:09

編集2020/08/20 09:09
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ar3qna

2020/08/20 09:24

なるほど!そういうことなんですね。 >make install したときに、バイナリが ${LIBRARY_DIR} に配置されます。 そうすると、buildの中に入ってcmake、make、make installする必要あるのでしょうか? install先が設定ファイルに書いてあるなら、cmakeをCMakeLists.txt と同じ階層で実行してもいいのではないかと思いますが、違うのでしょうか? もしかして最終的に使うファイル以外に中間ファイル的なものが書き出されたりもするのでしょうか? ビルドはlinuxの中でいいとのこと、ホッとしました。
tiitoi

2020/08/20 11:16 編集

> cmakeをCMakeLists.txt と同じ階層で実行してもいいのではないかと思いますが、違うのでしょうか? build を作ってその中でビルドする理由は、ビルドした際にたくさんファイルが生成されるので、CMakeLists.txt と同じ階層でコマンドを実行すると、元からあったファイルと自動的に生成されたファイルが混ざってわかりづらくなってしまうので、可能ではあるのですが、非推奨となっています。 https://qiita.com/osamu0329/items/7de2b190df3cfb4ad0ca
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問