2015-07-31 2 views
0

Пожалуйста, обратите внимание на следующую структуру:CMake сгенерированный файл проекта в список внешнего источника

dev_root/ 
    \__ common/ 
     \__ inc/ 
     \__ src/ 
     \__ CMakeLists.txt 
    \__ project1/ 
     \__ inc/ 
     \__ src/ 
     \__ CMakeLists.txt 
    \__ project2/ 
     \__ inc/ 
     \__ src/ 
     \__ CMakeLists.txt 

Project1 и Проект2 отделенные проекты. Они оба используют общий код. Я хочу перечислить (выборочно) некоторые общие исходные файлы в файл проекта визуальной студии каждого проекта, чтобы я мог редактировать их в среде IDE.
Мне не нужна отдельная библиотека для общего кода.

Сейчас я использовать относительные пути, например, в файле Cmake project1 в:

set(_hdr 
    inc/proj1.h 
    ../common/inc/common1.h 
) 
set(_src 
    src/proj1.cxx 
    ../common/src/common1a.cxx 
    ../common/src/common1b.cxx 
) 
source_group("common\\inc" FILES 
       ../common/inc/common1.h 
) 
source_group("common\\src" FILES 
       ../common/src/common1a.cxx 
       ../common/src/common1b.cxx 
) 
source_group("inc" FILES inc/proj1.h) 
source_group("src" FILES src/proj1.cxx) 

add_executable(project1 ${_src} ${_hdr}) 

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

Любые предложения приветствуются. Большое спасибо.

ответ

0

Вы можете установить переменную в путь к общей папке и использовать ее для обращения к файлам в ней. Итак, всякий раз, когда вам нужно перемещать «общую» папку, вам нужно отредактировать только эту переменную.

CMakeLists.txt:

set(COMMON_DIR ${CMAKE_CURRENT_SOURCE_DIR}/common) 

project1/CMakeLists.txt:

set(_hdr 
    inc/proj1.h 
    ${COMMON_DIR}/inc/common1.h 
) 
set(_src 
    src/proj1.cxx 
    ${COMMON_DIR}/src/common1a.cxx 
    ${COMMON_DIR}/src/common1b.cxx 
) 
... 
Смежные вопросы