Как настроить CMake для правильной работы с моей структурой проекта? [Дубликат]

Существует инструмент ack, который будет делать именно то, что вы ищете.

http://linux.die.net/man/1/ack

ack -i search_string folder_path/*

Вы можете игнорировать -i для поиска с учетом регистра

6
задан Setzer22 1 September 2014 в 17:50
поделиться

1 ответ

Предположим, что у вас есть один файл CMakeLists.txt в каталоге Source, вы создадите две переменные, используя разные команды file()

file(GLOB Dir1_Sources RELATIVE "Dir1" "*.cpp")
file(GLOB Dir2_Sources RELATIVE "Dir2" "*.cpp")

и добавьте оба набора, сгенерированные командами file() в исходный список вашей цели:

add_executable(MyProgram ${Dir1_Sources} ${Dir2_Sources})

В качестве альтернативы вы можете поместить файл CMakeLists.txt в Dir1 и Dir2 (Main) в качестве следует

Source
    |
    |_ CMakeLists.txt   
    |    > project(MyProgram)
    |    > cmake_minimum_required(VERSION 3.8)
    |    > add_subdirectory("Dir1")
    |    > add_subdirectory("Dir2")
    |
    |_ Dir1   
    |     |_ CMakeLists.txt   
    |         > file(GLOB Sources "*.cpp")
    |         > add_library(Dir1 STATIC ${Sources})
    |_ Dir2   
          |_ CMakeLists.txt   
              > file(GLOB Sources "*.cpp")
              > add_executable(MyProgram ${Sources})
              > target_link_libraries(MyProgram Dir1)

, чтобы добавить подкаталоги в качестве дополнительных (статических) библиотек, связанных с вашей главной целью.

13
ответ дан qed 23 August 2018 в 06:57
поделиться
  • 1
    То, что я прошу, - это файл строки (GLOB Dir1_Sources RELATIVE & reg; Dir1 & quot ;, cpp & quot;), который находится в другом файле CMakeLists.txt, в файле Dir1, а не в источнике или Dir2. Но я вижу, что это не рабочий процесс с CMake, поскольку все в Интернете, похоже, настаивают на том, чтобы делать все в одном файле. В любом случае, твой хороший трюк, спасибо. – Setzer22 1 September 2014 в 18:30
  • 2
    @ Setzer22 Да, конечно, этот образец предположил, что у вас есть один CMakeLists.txt на уровне Source. Ну, хотя вы могли бы также разместить соответствующие CMakeLists.txt файлы в (не основных) подкаталогах для создания библиотек и добавить их с помощью add_subdirectory() , но, как вы упомянули, это не обычный способ просто собрать из источников. – πάντα ῥεῖ 1 September 2014 в 18:41
  • 3
    @ Setzer22 Я добавил еще один образец для упомянутого альтернативного решения. – πάντα ῥεῖ 1 September 2014 в 19:10
  • 4
    Спасибо, что было самым близким к тому, что я искал! – Setzer22 2 September 2014 в 11:21
  • 5
    Я сделал несколько изменений, чтобы понравиться CLION. Важно отметить, что add_executable должен появиться перед target_link_libraries, иначе cmake будет жаловаться. – qed 25 August 2017 в 21:39
  • 6
    – Tsyvarev 12 May 2018 в 10:28
Другие вопросы по тегам:

Похожие вопросы: