У меня была такая же проблема с C++ и CMake с использованием CLion. И это, как мне удалось решить:
Вот моя структура проекта:
├── CMakeLists.txt
├── README.md
└── src
└── ch01
├── ex01
│ └── main.cpp
└── ex02
└── main.cpp
Вот содержание CMakeLists.txt
:
cmake_minimum_required(VERSION 3.5)
project(CPPTutorial)
set(CMAKE_CXX_STANDARD 14)
set(sourceDir "${PROJECT_SOURCE_DIR}/src")
file(GLOB_RECURSE sourceFiles "${sourceDir}/*.cpp")
FOREACH (sourceFile ${sourceFiles})
MESSAGE(STATUS "Process file: ${sourceFile}")
get_filename_component(dir1 ${sourceFile} PATH)
get_filename_component(dir1 ${dir1} NAME)
get_filename_component(dir2 "${sourceFile}/../../" ABSOLUTE)
get_filename_component(dir2 ${dir2} NAME)
MESSAGE(STATUS "New target: ${dir2}_${dir1}")
add_executable("${dir2}_${dir1}" ${sourceFile})
endforeach (sourceFile)
Это создает новую цель для каждого источника в каталог .. на самом деле он нуждается в больше работы, но он выполняет эту работу для меня.
Ограничения:
- Один исходный файл для каждого суб суб директории
- структура должна быть такой же, как
AAA/BBB
где AAA
является родительским каталогом и BBB
является его подкаталог.
- Вы можете добавить больше
AAA
на том же уровне, а также более BBB
Надеюсь, что это помогает
Я предпочитаю прямо противоположное (и [я не один] (HTTP: // StackOverflow .com/a/1060061/3962537)) - для явного перечисления каждого источника, который должен использоваться для каждого компонента в проекте. Поскольку связанные ответы объясняются подробно, это позволяет избежать множества проблем, когда вы начинаете работать с более крупными проектами. –
Ваш вопрос меньше, больше мнения. Учитывая, что вы ответили на свой вопрос в ту же минуту, меня озадачило то, что вы на самом деле хотите. Downvoting. – usr1234567
@ usr1234567 Для многих людей, переключаясь с кодовых блоков и выполняя, например, конкурентные проблемы программирования (где у вас есть несколько отдельных программ в своем собственном исходном файле), его реальная боль добавляет каждое имя исходного файла в cmakelists.txt и таким образом создает конфигурации.Я думал, что это может быть полезно для кого-то, как для меня, потому что я потерял весь день, пытаясь понять это. –