CMake с путями включения и исходного кода - базовая настройка - PullRequest
40 голосов
/ 29 ноября 2011

Я пытаюсь настроить тестовый проект, похожий на мой собственный проект, просто чтобы сначала все заработало, и это выглядит так:

/MainProject/inc/main.h
/MainProject/src/main.cpp
/LibProject/inc/test.h
/LibProject/src/test.cpp

Я нашел несколько учебных пособий, но не могу узнать, как их настроить, если у меня есть папки inc и src? Как будут выглядеть файлы CMakeLists.txt? Буду ли я иметь один в /, по одному в каждой из папок проекта? Кажется, мне не нужно иметь его в папках inc и src?

Ответы [ 3 ]

76 голосов
/ 29 ноября 2011

Вам нужно CMakeLists.txt для каждого исходного подкаталога.Ваша структура должна выглядеть примерно так:

root
|-MainProject
| |-inc
| | '-main.h
| |-src
| | |-main.cpp
| | '-CMakeLists.txt
| '-CMakeLists.txt 
|-LibProject
| |-inc
| | '-test.h
| |-src
| | |-test.cpp
| | '-CMakeLists.txt
| '-CMakeLists.txt
'-CMakeLists.txt

Содержимое root/CMakeLists.txt:

project(MyProject)
add_subdirectory(MainProject)
add_subdirectory(LibProject)

Содержимое LibProject/CMakeLists.txt и MainProject/CMakeLists.txt:

add_subdirectory(src)

Содержимое LibProject/src/CMakeLists.txt:

# Notice name prefix of this variable, set by CMake according
# to value given with "project()" in the root CMakeLists.txt.
include_directories(${MyProject_SOURCE_DIR}/LibProject/inc)
add_library(LibProject test.cpp)

Содержимое MainProject/src/CMakeLists.txt:

include_directories(${MyProject_SOURCE_DIR}/MainProject/inc)
# I assume you want to use LibProject as a library in MainProject.
include_directories(${MyProject_SOURCE_DIR}/LibProject/inc)
link_directories(${MyProject_SOURCE_DIR}/LibProject/src)
add_executable(MainProject main.cpp)
target_link_libraries(MainProject LibProject)

Затем настройте и создайте с помощью:

$ cd root
$ mkdir build
$ cd build
$ cmake ..
$ make
20 голосов
/ 29 ноября 2011

Вы можете сделать это следующим образом.

  • CMakeLists.txt в каталоге MainProject:

    project(MainProject)
    
    add_subdirectory(LibProject/src)
    add_subdirectory(MainProject/src)
    
  • CMakeLists.txt в вашем каталоге LibProject / src:

    include_directories(${PROJECT_SOURCE_DIR}/LibProject/inc/)
    add_library(LibProject test.cpp)
    
  • CMakeLists.txt в вашем каталоге MainProject / src:

    include_directories(${PROJECT_SOURCE_DIR}/MainProject/inc/)
    add_executable(MainProject main.cpp)
    target_link_libraries(MainProject LibProject)
    
6 голосов
/ 19 октября 2018

В моем случае я хотел сделать это с одиночным CMakeList . И это сработало для меня. Я добавляю свое решение на случай, если оно кому-нибудь пригодится.

Вот что я сделал в моем случае:

My structure:
Project
|CMakeLists.txt
|-src
| |*.cpp
| |*.c
|-include
| |*.hpp
| |*.h

Мой CMakeLists.txt состоит из основных частей:

include_directories(
        ${PROJECT_SOURCE_DIR}/include
        ${PROJECT_SOURCE_DIR}/src
)

^ Включает файлы .cpp для добавления заголовков в папку include.

file(GLOB all_SRCS
        "${PROJECT_SOURCE_DIR}/include/*.h"
        "${PROJECT_SOURCE_DIR}/include/*.hpp"
        "${PROJECT_SOURCE_DIR}/src/*.cpp"
        "${PROJECT_SOURCE_DIR}/src/*.c"
        )

^ Просто добавьте все, что находится в этих папках.

PS: если вы хотите увидеть полный CMakeLists.txt, перейдите по ссылке проекта NEGU93 / ForbiddenDesert .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...