私はCMakeをビルドツールとして使用し、私と同僚が使うためのシンプルなテンプレートを作成しました。私がベストプラクティスを簡単にオンラインで検索したとき、私は図書館を作るためにさまざまなアプローチに出会った。CMakeのADD_LIBRARY/ADD_EXECUTABLEコマンドにヘッダーファイルを追加する理由
このテンプレートでは、ヘッダーファイルとソースファイルを2つの別々の変数にリストしていますが、ヘッダーをadd_library
コマンドに渡すわけではありません。そして、私はset_target_properties
とPUBLIC_HEADER
変数を使ってヘッダファイルリストを与えます。
これまでのところうまくいくようですが、私が不必要に複雑にしているのではないかと思います。いくつかの人々は、add_libraryコマンドにもヘッダファイルを与えますが、set_target_properties
なども使用しません。要するに
:
- 我々は
add_library
にヘッダファイルをインクルードしたりすべきではない私たち(ベストプラクティスなど)必要がありますか? 2つの使用法の影響。 - add_library/add_executableでヘッダーを追加することによってどのような目的が果たされますか?彼らはそれがなくても働いているように見えます(前方宣言とシンボルのみのようです)。ご理解の上でご確認ください。
(ここで私たちはあなたの「シンプル」な方法を使用私たちのプロジェクトで
cmake_minimum_required(VERSION 3.1.0)
project(lae CXX C)
set(CMAKE_CXX_STANDARD 14)
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
)
set(SOURCE_FILES
...
)
set(HEADER_FILES
...
)
set(PRIVATE_HEADER_FILES
...
)
add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES})
set(REQUIRED_LIBRARIES
...
)
target_link_libraries(${PROJECT_NAME} ${REQUIRED_LIBRARIES})
SET_TARGET_PROPERTIES(
${PROJECT_NAME}
PROPERTIES
FRAMEWORK ON
SOVERSION 0
VERSION 0.1.0
PUBLIC_HEADER "${HEADER_FILES}"
PRIVATE_HEADER "${PRIVATE_HEADER_FILES}"
ARCHIVE_OUTPUT_DIRECTORY "lib"
LIBRARY_OUTPUT_DIRECTORY "lib"
OUTPUT_NAME ${PROJECT_NAME}
)
私は両方をマージした方法が好きでした!また、エクスポートオプションがEclipse CDTを使用している場合、あなたが言及したことを見ました(プロジェクトファイルはヘッダーのものを省略します)。私はあなたの解決策に固執すると思います。ありがとう! –
add_libraryに「ヘッダ」が追加/追加されていない場合、「インストール」の第2の方法は動作していないようです。それはビルドメイク時に 'no targets specified、no makefile found'という文句を言います。どんな手掛かり? – parasrish
@parasrish SET_TARGET_PROPERTIESコマンドでヘッダーを定義しないと、ヘッダーが定義されていないため、ヘッダーは機能しません。ただし、「パブリックヘッダー」を正しく設定してSET_TARGET_PROPERTIESを実行すると、インストールターゲットが正しく動作するはずです。 –