Comment créer un cmake en-tête de la seule bibliothèque qui dépend de fichiers d'en-tête?

J'ai un projet avec la structure suivante:

project
 |
 |-------> lib1
 |           |----> lib1.h
 |
 |-------> lib2
 |           |----> lib2.h
 |
 |-------> main.cc

Les deux libs lib1 et lib2 contiennent uniquement les fichiers d'en-tête, tandis que lib2.h comprend lib1.h, et main.cc comprend lib2.h.

Comment puis-je écrire le fichier cmake pour ce projet maintenant? J'ai essayé de créer un l'interface de la bibliothèque pour lib2, mais le compilateur ne peut pas trouver lib1.h. Voici le contenu de mes fichiers cmake:

CMakeLists.txt pour lib2:

add_library(lib2 INTERFACE)
target_sources(lib2 INTERFACE lib2.h)
target_include_directories(lib2 INTERFACE ../lib1/lib1.h)

CMakeLists.txt pour l'ensemble du projet:

add_executable(project main.cc)
target_link_libraries(project lib2)

Quel est le problème dans les fichiers cmake?

  • Ne pouvez-vous pas juste la liste de vos en-têtes dans add_executable et de supprimer tous les add_library?
  • Une chose qui me semble bizarre dans votre code source et pourrait expliquer le problème: target_include_directories() est uniquement pour les répertoires qui contiennent des fichiers d'en-tête. Il devrait donc être target_include_directories(lib2 INTERFACE ../lib1).
  • Merci à tous pour les commentaires!
InformationsquelleAutor X. Liu | 2016-10-06