2016-05-05 2 views
2

Большинство людей, которые переключились с какой-либо другой среды разработки, имеющей возможность создать отдельный файл, немного запутаны CLion, у которого нет опции.Как избежать добавления каждого исходного файла в CMake в CLion?

Итак, как вы можете избежать добавления каждого имени каждого исходного файла в CMake?

+1

Я предпочитаю прямо противоположное (и [я не один] (HTTP: // StackOverflow .com/a/1060061/3962537)) - для явного перечисления каждого источника, который должен использоваться для каждого компонента в проекте. Поскольку связанные ответы объясняются подробно, это позволяет избежать множества проблем, когда вы начинаете работать с более крупными проектами. –

+0

Ваш вопрос меньше, больше мнения. Учитывая, что вы ответили на свой вопрос в ту же минуту, меня озадачило то, что вы на самом деле хотите. Downvoting. – usr1234567

+1

@ usr1234567 Для многих людей, переключаясь с кодовых блоков и выполняя, например, конкурентные проблемы программирования (где у вас есть несколько отдельных программ в своем собственном исходном файле), его реальная боль добавляет каждое имя исходного файла в cmakelists.txt и таким образом создает конфигурации.Я думал, что это может быть полезно для кого-то, как для меня, потому что я потерял весь день, пытаясь понять это. –

ответ

-1

Я написал шаблонный файл cmake, который я использую, который может сделать это за вас. Он автоматически сделает исходные файлы в виде отдельных исполняемых файлов.

Cmake шаблон можно найти здесь: template file

Вам просто нужно вставить его в CMakeLists.txt и обновить CMake. Затем вы можете выбрать из раскрывающегося меню, какой файл вы хотите запустить.

Подсказка: Добавить сочетание клавиш для CMake обновления в настройках clion

2

То, что вы ищете что-то вроде file(GLOB_RECURSE *.cpp). Вы можете настроить эту команду для фильтрации каталогов, если вам нужно.

0

Вот полный пример, который делает это.

cmake_minimum_required(VERSION 2.8.12) 
project(openshell) 
set(CMAKE_VERBOSE_MAKEFILE on) 
file(GLOB SOURCES "./*.c") 
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -L/usr/local/include/ -L/usr/include -std=c11 -pedantic -O3 -g -Wall -pedantic -ledit -lncurses -lcurses -ltermcap") 
include_directories(/usr/local/include/ /usr/include) 
link_directories(/usr/lib) 
link_directories(/usr/local/ib) 
add_executable(openshell ${SOURCES}) 
target_link_libraries(openshell edit readline) 
0

У меня была такая же проблема с 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) 

Это создает новую цель для каждого источника в каталог .. на самом деле он нуждается в больше работы, но он выполняет эту работу для меня.

Ограничения:

  1. Один исходный файл для каждого суб суб директории
  2. структура должна быть такой же, как AAA/BBB где AAA является родительским каталогом и BBB является его подкаталог.
  3. Вы можете добавить больше AAA на том же уровне, а также более BBB

Надеюсь, что это помогает

Смежные вопросы