4

これはばかげた質問かもしれませんが、見抜くことができません。ここで、自分にかなり近い他の回答を検索しましたが、それでも方法がわかりませんでした。

問題は、Windows で curses.h を使用する「C」プログラムをコンパイルできないことです (私は MinGW で Clion を使用しています)。それを実行しようとすると、curses.h の関数に「未定義の参照」が与えられます。 (「initscr」、「clear」など)。

MinGW Installation Manager を使用して、「mingw-32-libpdcurses」をインストールしました (dev と dll の 2 つの異なるクラスで 2 つ利用できました。dll をインストールしました)。

私が使用しているCMAKEfileはこれです:

cmake_minimum_required(VERSION 3.3)
project(Project1)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -lpdcurses")

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")

file(GLOB Project1_SRC
        "*.h"
        "*.c"
        )

add_executable(Project1 ${Project1_SRC})

curses.h でコンパイルするには、何を変更すればよいですか?

4

1 に答える 1

5

基本的に、サードパーティのライブラリを見つけて CMake と統合するのと同じ方法Find___.cmake、パッケージ化されたモジュールの 1 つを使用します。

これらはshare/cmake-X.Y/Modules、CMake インストール ディレクトリにあります。個々のドキュメント、およびcmake --help-command find_packageそれらの呼び出し方法の詳細については、ファイル自体を確認してください。

特に MinGW で PDCurses を使用して次のことを試したことはありませんが、うまくいかない場合は、Kitware (CMake のメーカー) に明確なバグ レポートを送信します。

find_package( Curses REQUIRED )
include_directories( ${CURSES_INCLUDE_DIRS} )
target_link_libraries( Project1 ${CURSES_LIBRARIES} )

次の変数は、使用可能なヘッダーを示すために適切に設定されます。

  • CURSES_HAVE_CURSES_H為にcurses.h
  • CURSES_HAVE_NCURSES_H為にncurses.h
  • CURSES_HAVE_NCURSES_NCURSES_H為にncurses/ncurses.h
  • CURSES_HAVE_NCURSES_CURSES_H為にncurses/curses.h

追加のアドバイス:

file(GLOB Project1_SRC
        "*.h"
        "*.c"
        )

そうしないでください。

そのまさにその機能のドキュメントから引用するには:

ソース ツリーからソース ファイルのリストを収集するために GLOB を使用することはお勧めしません。ソースが追加または削除されたときに CMakeLists.txt ファイルが変更されない場合、生成されたビルド システムは CMake に再生成を要求するタイミングを認識できません。


set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")

それもしないでください。

生成されたファイルがソースディレクトリに配置されることは望ましくありません(バージョン管理システムの邪魔になるか、さらに悪いことに、実際にリポジトリにチェックインされます)。邪魔にならないように、バイナリディレクトリにすべてを生成する必要があります。

于 2016-02-02T17:20:10.470 に答える