64 votes

Liste des fichiers d'en-tête dans le projet Visual Studio C ++ généré par cmake

Je construis un système de construction basé sur cmake pour notre produit. Le problème est que le projet Visual Studio, généré par cmake, n'affiche pas les fichiers d'en-tête dans le navigateur de la solution.

Qu'est-ce que j'ai besoin d'ajouter dans CMakeList.txt pour lister les fichiers d'en-tête? La solution privilégiée consiste à ne pas avoir besoin de lister chaque fichier d'en-tête.

Solution Voici une solution que je suis venu avec:

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

Merci

46voto

tim_hutton Points 355

Ajoutez simplement les fichiers d'en-tête avec les fichiers source:

 PROJECT (Test)

ADD_EXECUTABLE(Test test.cpp test.h)
 

Ou en utilisant des variables:

 PROJECT (Test)

SET(SOURCE
  test.cpp
)

SET(HEADERS
  test.h
)

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

27voto

Simeon Fitch Points 1044

L'astuce de base consiste à ajouter les fichiers d'en-tête à l'une des cibles (exécutable ou bibliothèque). Ceci est particulièrement irritant car cmake connaît déjà toutes les dépendances du fichier d’en-tête et devrait s’occuper de cela pour nous. Vous pouvez l'organiser davantage en utilisant la commande source_group :

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

Notez que vous devez également faire la même chose dans Xcode.

9voto

npclaudiu Points 1431

J'ai eu le même problème lorsque je travaillais sur un système de compilation pour un projet Qt et je suis sorti avec cette solution, grâce aux autres articles de cette page. J'ai inclus un exemple complet adapté de mes makefiles. J'espère que cela t'aides!

 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)
 

2voto

sbi Points 100828

Euh, je ne connais presque rien à CMake, mais un projet que j'ai examiné porte sur les utilisations

 set(SOURCE
  foo.cpp
  bar.cpp
)

set(HEADERS
  foo.h
  bar.h
)
 

dans son fichier CMakeLists.txt .

Cela aiderait-il?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X