2009-07-22 91 views
44

我正在爲我們的產品構建一個基於cmake的構建系統。問題是由cmake生成的Visual Studio項目在解決方案瀏覽器中不顯示頭文件。列出由cmake生成的Visual Studio C++項目中的頭文件

我需要在CMakeList.txt中添加列表頭文件嗎? 首選的解決方案是不需要列出每個特定的頭文件。

解決方案 這裏是我想出了一個解決方案:

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

感謝

+5

作爲獎勵,你可以做source_group(頭文件$ {} INCS)在一個單獨的顯示它們VS文件夾 – 2009-09-01 03:08:40

回答

34

只需添加頭文件與源文件一起:

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

IMO的事情所有這些答案會錯過(與@Simeon除外)是你不不想明確列出所有頭文件,因爲: 1.被列爲顯式依賴關係的頭文件很容易與實際在源文件中使用的頭文件不同步,並且2.您的CMake已經知道您有哪些頭文件使用,所以手動輸入也是多餘的。所以我們真的需要一個答案,讓CMakes自己瞭解頭文件依賴關係,並將它們粘貼到一個解決方案的組中。 – 2013-01-25 18:43:37

+0

@JeffTrull:實際上CMake並不知道你使用了哪個頭文件 - 它可以與多種語言和多個編譯器一起工作,並且不能依賴報告頭文件的編譯器。所以我們需要明確列出它們。製作源代碼發行版也很乾淨。 – 2013-01-27 21:44:25

18

對此的基本技巧是將頭文件添加到其中一個目標(可執行文件或庫)。這是特別惱人的,因爲cmake已經知道所有頭文件的依賴關係,應該爲我們處理這個問題。您可以進一步使用source_group命令組織它:

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

請注意,你必須做同樣的事情在Xcode了。

9

在Qt項目的構建系統中工作時,我遇到了同樣的問題,並且出現了這個解決方案,這要歸功於此頁面上的其他帖子。我包含了一個從我的makefiles改編的完整示例。希望這可以幫助!

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) 
相關問題