cmake如何避免每次构建lib

时间:2018-10-25 04:27:45

标签: cmake

文件结构

├── 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 :(得分:1)

箭头的答案只是一个补充:

如果要完全避免检查是否有任何最新目标,可以发出以下命令:

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

请注意,--target untitled已更改为--target untitled/fast

您可以在CMakeLists.txt中提到的任何目标上添加“ / fast”来触发编译,而无需进行任何其他检查。另一方面,要非常小心,因为如果a_lib的源被更改,并且目标a_lib也应被编译/链接,这将使您创建不一致的结果。

答案 1 :(得分:0)

从此输出判断

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时执行链接。如果您没有看到这些消息,则不会重建该库。