настроить включаемые каталоги для каждого исполняемого файла с помощью cmake - PullRequest
1 голос
/ 21 декабря 2011

Я начал проект с cmake, состоящий из двух исполняемых файлов.Много кода используется этими двумя исполняемыми файлами.

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

можно ли настроить подключаемые каталоги независимо для исполняемого файла?

Это мои каталоги:

.
├── CMakeCache.txt
├── CMakeFiles
│   [...]
├── cmake_install.cmake
├── CMakeLists.txt
├── includes
│   ├── client
│   │   └── main.hpp
│   ├── server
│   │   └── main.hpp
│   └── shared
├── Makefile
└── sources
    ├── client
    │   ├── main.cpp
    ├── shared
    │   ├── lib.cpp
    └── server
        └── main.cpp

Ответы [ 2 ]

5 голосов
/ 21 декабря 2011

Вы должны создать CMakeLists.txt для обоих ваших исполняемых файлов в их каталогах (sources\client\CMakeLists.txt и sources\server\CMakeLists.txt). Там вы можете include_directories(), и это не помешает другим целям.

Не забудьте сделать add_subdirectory() в своем корне CMakeLists.txt.

0 голосов
/ 02 апреля 2018

Это зависит от того, имеет ли смысл add_subdirectory, от вашего проекта и макета каталога. Это хорошо для разделения частей проекта, которые являются отделимыми, и на вашем простом примере стратегия является разумной.

Еще один способ справиться с этим - использовать target_include_directories, чтобы указывать для целевых включений. Для вашего примера ваш CMakeLists.txt будет выглядеть примерно так:

project(client_server)    

include_directories(
  includes
  includes/shared)

add_library(client_server_lib sources/lib.cpp)

add_executable(server sources/server/main.cpp)
target_include_directories(server PUBLIC
  includes/server
)
target_link_libraries(server client_server_lib)

add_executable(client sources/client/main.cpp)
target_include_directories(client PUBLIC
  includes/client
)
target_link_libraries(client client_server_lib)

Дополнительная информация на https://cmake.org/cmake/help/v3.0/command/target_include_directories.html

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