libnetはCMake自体を使用していないようです。そのため、個別にビルドするか、独自のプロジェクトの一部にする必要があります。
個別にビルドするには、いくつかの選択肢があります。ビルドして(必要に応じてインストールして)find_library
、実際のlibnet.a/libnet.libファイルを見つけるために使用できます。
find_library(libnet NAMES net libnet PATHS <wherever you built it to>)
include_directories(<wherever you built it to>/include)
target_link_libraries(test libnet)
CMakeは、を使用してこれを自動化する適切な方法を提供しますExternalProject_Add
。これは少し使いにくいですが、libnetのダウンロード、抽出、ビルド、インストールをすべて1つのコマンドで実行できます。ただし、プラットフォームに応じて、libnetにはいくつかの異なる構築方法があるように見えるため、これはそれほど単純ではない場合があります。
もう1つのオプションは、独自のプロジェクトにlibnetソースを含め、を介してライブラリとして追加することadd_library
です。libnetソースのリストを作成し、libnet makefileを調べて、独自のCMakeLists.txtで特別な処理が必要なコンパイラフラグ/奇妙なものがないかどうかを確認する必要があります。
これは、IDEの完全なlibnetソースツリーにアクセスでき、libnetビルドを微調整でき、libnetビルドが変更された場合に独自のプロジェクトが古くなる(再構築が必要)ため、おそらく最良のオプションです。 。
set(LibnetSources <list all sources and headers>)
add_library(libnet ${LibnetSources})
include_directories(${PROJECT_SOURCE_DIR}/libnet/include)
target_link_libraries(test libnet)
libnetソースのリストの生成に役立てることができますが、ファイルの追加または削除はCMakeによって自動的に検出されないため、お勧めしません。file(GLOB...)
これを行う場合は、再コンパイルを試みる前に、cmakeを手動で再実行することを確認する必要があります。libnetファイルを追加/削除する予定がない場合、これは問題ではありません。
編集:ExternalProjectモジュールを使用
OK、おそらく最良の3番目のオプションがありますが、設定が少し複雑になる可能性があります。CMakeのExternalProject
モジュールを使用します。これは、CMakeを使用しないものでも、外部の依存関係を構築できるように設計されています。これはそれを使用することについてのまともな記事です。
CMakeLists.txtをこれに置き換えてみてください(Ubuntuでgccを使用してのみテストされています)。つまり、libnetをダウンロードして構成し、ビルドして、ビルドツリー(/ usr / localではなく)にインストールします。その後、実行可能ファイルにインクルードしてリンクすることができます。
# Minimum version 2.8.5 since we need ExternalProject module
cmake_minimum_required(VERSION 2.8.5 FATAL_ERROR)
project(test)
# Enable ExternalProject CMake module
include(ExternalProject)
# Set default ExternalProject root directory
set_directory_properties(PROPERTIES EP_PREFIX ${CMAKE_BINARY_DIR}/ThirdParty)
# Add libnet
ExternalProject_Add(
libnet
URL http://packetfactory.openwall.net/libnet/dist/libnet.tar.gz
TIMEOUT 30
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR>
BUILD_IN_SOURCE ON
# Wrap download, configure, build and install steps in a script to log output
LOG_DOWNLOAD ON
LOG_CONFIGURE ON
LOG_BUILD ON
LOG_INSTALL ON)
# Specify include dir
ExternalProject_Get_Property(libnet install_dir)
include_directories(${install_dir}/include)
# Add test executable target
add_executable(test main.c)
# Create dependency of test on libnet
add_dependencies(test libnet)
# Specify test's link libraries
target_link_libraries(test ${install_dir}/lib/libnet.a)