2009-07-22 5 views
44

私たちの製品用のcmakeベースのビルドシステムを構築しています。問題は、cmakeによって生成されたVisual Studioプロジェクトが、ソリューションブラウザにヘッダーファイルを表示しないことです。cmakeによって生成されたVisual Studio C++プロジェクトでヘッダーファイルを一覧表示

ヘッダファイルをリストするためにCMakeList.txtに追加する必要があるものは? 推奨される解決方法は、それぞれの特定のヘッダーファイルを一覧表示する必要がない場合です。

+5

、フォルダ –

答えて

34

ただ、ソースファイルと一緒にヘッダファイルを追加し

file(GLOB_RECURSE INCS "*.h") 
add_library(myLib ${SRCS} ${INCS}) 

ありがとう::

PROJECT (Test) 

ADD_EXECUTABLE(Test test.cpp test.h) 

または使用して変数をここで解決

は、私が来たソリューションです。

PROJECT (Test) 

SET(SOURCE 
    test.cpp 
) 

SET(HEADERS 
    test.h 
) 

ADD_EXECUTABLE(Test ${SOURCE} ${HEADERS}) 
+6

VS別々にそれらを表示するにはsource_group(ヘッダファイル$ {INCSを})行うことができますIMOこれらの答えのすべてが(@Simeonを除いて)欠場事はつまりあなたのドンであります 1.明示的な依存関係としてリストされているヘッダーは、ソースで実際に使用しているヘッダーと簡単にはずれます。 2. CMakeはどのヘッダーを既に知っていますかそれを手動で入力するのも冗長です。だから私たちは実際にヘッダーの依存関係についてCMakes自身の知識を必要とする答えが必要であり、解決のためにそれらをグループに張っています。 –

+0

@JeffTrull:実際には、どのヘッダを使うのかはわかりません。複数の言語や複数のコンパイラで動作し、ヘッダーを報告するコンパイラに依存することはできません。だから我々は明示的にそれらをリストアップする必要があります。ソースコードを配布するのにもきれいです。 –

+1

依存スキャナ機能はいくつかの言語でしか動作しないかもしれませんが、C++ではうまくいきます。この知識をCMakeが既にVisual Studioのユーザに提供していることは素晴らしいことです。そうでなければ、少なくとも何らかのフックを持っているので、私たちはCMakeコードで自分自身で書くことができます(source_group経由)。依存関係の明示的なリストは、コンパイルが間違っていても動作し続けるので、間違いなく古くなってしまいます。プラス、それは冗長です... –

18

これの基本的なやり方は、ターゲット(実行可能ファイルまたはライブラリのいずれか)にヘッダーファイルを追加することです。 cmakeはヘッダファイルの依存関係をすべて知っているので、これは特に気になります。あなたもXcodeで同じことをしなければならない

source_group("My Headers" FILES ${MY_HDRS}) 

注:あなたはsource_groupコマンドを使用して、さらにそれを整理することができます。

9

Qtプロジェクトのビルドシステムで同じ問題が発生しましたが、このページの他の記事のおかげでこのソリューションが出ました。私は私のmakefileから適応された完全な例を含めました。お役に立てれば!ボーナスとして

cmake_minimum_required (VERSION 2.6) 
project (DemoSolution) 

find_package(Qt4 REQUIRED) 
include(${QT_USE_FILE}) 
add_definitions(${QT_DEFINITIONS}) 

include_directories (../../include/) 
set(CMAKE_INCLUDE_CURRENT_DIR ON) 

file(GLOB Demo_SOURCES *.cpp) 
file(GLOB Demo_HEADERS *.hpp) 
file(GLOB Demo_FORMS *.ui) 
file(GLOB Demo_RESOURCES resources.qrc) 

qt4_wrap_cpp(Demo_MOC ${Demo_HEADERS}) 
qt4_wrap_ui(Demo_FORMS_HEADERS ${Demo_FORMS}) 
qt4_add_resources(Demo_RESOURCES_RCC ${Demo_RESOURCES}) 

source_group("Headers" FILES ${Demo_HEADERS}) 
source_group("MOC" FILES ${Demo_MOC}) 

set(QT_USE_QTNETWORK, true) 
set(QT_USE_QTSQL, true) 
set(QT_USE_QTXML, true) 

add_library(Demo SHARED 
    ${Demo_SOURCES} 
    ${Demo_HEADERS} 
    ${Demo_MOC} 
    ${Demo_FORMS_HEADERS} 
    ${Demo_RESOURCES_RCC} 
    ) 

target_link_libraries(Demo ${QT_LIBRARIES}) 
add_definitions(-D_DEMO_EXPORTS) 
+4

グロビングを行うには良い形式ではありません。 http://stackoverflow.com/questions/1027247/best-way-to-specify-sourcefiles-in-cmake cmakeのドキュメントから: ソースツリーからソースファイルのリストを収集するためにGLOBを使用することはお勧めしません。 NOの場合 CMakeリスト。ソースが追加または削除されたときにtxtファイルが変更された場合、 生成されたビルドシステムは、いつCMakeに再生成を要求するかを知ることができません。 – Vitali

関連する問題