У меня есть следующие структуры и реж Lib зависимостей:CMake и зависимости
./lib-a
./lib-b (depending on lib-a)
Каждый реж содержит CMakeLists.txt для генерации своего собственного LIB. Я использую политику построения вне исходного кода.
Чтобы сказать, что lib-b зависит от lib-a, я добавил ./lib-b/CMakeLists.txt команду add_subdirectory (../ lib-a lib-a) в соответствии с тем, что учил официальным учебником CMake (http://www.cmake.org/cmake-tutorial/). Таким образом, я получаю, что в директории ./lib-b/build создается подкаталог lib-a.
Это не то поведение, которое я желаю. То, что я хотел бы получить, это CMake, ссылающийся на lib-a при создании lib-b, и если lib-a еще не сгенерирован, CMake должен сгенерировать его внутри ./lib-a/build с помощью CMakeLists.txt из lib-a (в поведении, аналогичном поведению инструмента make при работе с зависимостями).
Я также хотел бы добавить, что я не использую корень CMakeLists.txt в моем примере, но то, что я хотел бы иметь, это lib-b/CMakeLists.txt, объявляющий зависимость от lib-a, что делает lib-a, если он еще не скомпилирован, используя собственный lib-a/CMakeLists.txt.
Вот структура каталоги и их содержимое:
lib-a/
CMakeLists.txt (for compiling lib-a)
src/
test.cpp
include/
test.hpp
lib-b/
main.cpp
CMakeLists.txt (for compiling lib-b; here is the point where I would like to make reference to lib-a, that I need for the generation of lib-b)
Lib-б/main.cpp содержит также включать в test.hpp из Lib-а потому, что она использует функцию Lib-а. Это следует учитывать в спецификации lib-b/CMakeLists.txt.
Не могли бы вы предоставить мне два файла lib-a/CMakeLists.txt и lib-b/CMakeLists.txt?
Я надеюсь, что это может прояснить мои потребности
Tnx заранее
D.
Tnx для ваш ответ и предложение использовать target_link_libraries, но приведенный вами пример не соответствует моим потребностям. Действительно, у вас есть все файлы .cpp и .h в одном и том же каталоге, и вы пишете отпечатки в одном CMakeLists.txt в корневом каталоге. На моей стороне вместо этого у меня есть два dirs каждый со своим CMakeLists.txt, как объяснено в исходном сообщении. Не могли бы вы объяснить мне, как ваше предлагаемое решение и использование target_link_libraries могут адаптироваться к моему делу, указав содержимое как lib-a/CMakeLists.txt, так и lib-b/CMakeLists.txt моего дела? – davide
@davide Он отлично подходит для проектов subdir. Обновленный ответ, чтобы отразить это. – IdeaHat
Tnx, а как же включить файлы lib_a? Должен ли я объяснять в lib_b/CMakeLists.txt команду target_include_directories, указывающую на каталог файлов lib_a include? – davide