文件结构
├── 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都花费很长时间。
答案 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
时执行链接。如果您没有看到这些消息,则不会重建该库。