cmake, как избежать сборки lib каждый раз - PullRequest
0 голосов
/ 25 октября 2018

структура файла

├── a_lib
│   ├── a.cpp
│   └── a.h
├── CMakeLists.txt
└── main.cpp

CmakeLists.txt

cmake_minimum_required(VERSION 3.8)
project(untitled)

set(CMAKE_CXX_STANDARD 11)

add_library(a_lib SHARED a_lib/a.cpp)
target_include_directories(a_lib PUBLIC a_lib/)

add_executable(untitled main.cpp)
target_link_libraries(untitled a_lib)

Но каждый раз, когда я собираю a_lib, он будет перестраиваться, когда a_lib не изменяется.

cmake --build /home/autocar/Workspace/untitled/cmake-build-debug --target untitled -- -j 4
[ 50%] Built target a_lib
[100%] Built target untitled

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

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Только одно дополнение к ответу arrowd:

Если вы хотите полностью избежать проверки, если какая-либо цель актуальна, вы можете выполнить следующую команду:

cmake --build /home/autocar/Workspace/untitled/cmake-build-debug --target untitled/fast -- -j 4

Обратите внимание, что --target untitled изменяется на --target untitled/fast.

Вы можете добавить «/ fast» к любой цели, упомянутой в CMakeLists.txt, чтобы запустить компиляцию без каких-либо дополнительных проверок.С другой стороны, будьте предельно осторожны, так как это позволяет создавать противоречивые результаты в случае изменения источников для a_lib, а также следует скомпилировать / связать целевой a_lib.

0 голосов
/ 25 октября 2018

Судя по этим выводам

cmake --build /home/autocar/Workspace/untitled/cmake-build-debug --target untitled -- -j 4
[ 50%] Built target a_lib

на самом деле ничего не восстанавливается.CMake просто проверяет актуальность этой цели.

Компиляция происходит, когда CMake печатает Building CXX object a.cpp.o, а связывание выполняется, когда появляется Linking CXX library a_lib.so.Если вы не видите эти сообщения, библиотека не будет восстановлена.

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