CMake базовая настройка проекта - PullRequest
2 голосов
/ 27 декабря 2010

Я новичок в CMake и переучиваю C ++, поэтому я надеюсь, что это подходящие вопросы.У меня есть проект в каталоге / projects / A и некоторые файлы .h в / projects / include / open-source-project-1, от которых зависит проект A.

Sample Hierarchy:
/projects
  /CMakeLists.txt
  /A
    /CMakeLists.txt
    /a.cpp
  /B
    /CMakeLists.txt
  /include
    /open-source-project-1
      /includeMe.h
    /open-source-project-2
  1. Нужно ли мнеиспользовать команду cmake include_directories ()?Если так, в какой файл CMakeLists.txt мне нужно поместить его?(Я пробовал много вариантов)
  2. Нужна ли мне другая команда cmake?
  3. Если я помещу это в самый верхний уровень CMakeLists.txt, должно ли это заботиться о всех случаях #включить в .cpp файлы для проекта A или B?
  4. Это типичная установка для проекта c ++?Это кажется логичным?

1 Ответ

3 голосов
/ 27 декабря 2010

Ваш файл CMakeLists.txt верхнего уровня не необходим, если все проекты не связаны каким-либо образом напрямую или не имеют неразрешимых зависимостей. Несвязанные проекты не должны включать друг друга, или им нужен файл родительского списка.

  1. Если A и B * разделены проекты, ./A/CMakeLists.txt и ./B/CMakeLists.txt должны содержать хотя бы эту строку:

    include_directories(../include)
    

    В противном случае, если A и B являются частями более крупного отдельного проекта, тогдауместно поместить эти строки в файлы верхнего уровня CMakeLists.txt:

    include_directories(include)
    add_subdirectory(A)
    add_subdirectory(B)
    
  2. Только для отдельных проектов.Один вызов cmake создаст одно дерево сборки.Один проект для дерева сборки - это все, что вам нужно.

  3. Нет.Только если файл списков верхнего уровня содержит директиву add_subdirectory, это повлияет на другие файлы списка.
  4. Нет, это нетипично.
...