我正在使用cmake
它生成我make
在基于 GCC 的环境中执行的 GNU Makefile。经过几年的使用,现在才意识到我有问题:
想象一下这是我的 CMakelists.txt:
add_library(lib1 STATIC empty.cpp)
add_library(lib2 STATIC empty.cpp)
add_library(lib3 STATIC empty.cpp)
add_executable(main main.cpp)
target_link_libraries(main lib1 lib2 lib3)
(empty.cpp 为空,main.cpp 为 void main(void){})
然后我运行cmake
和make -j4
. 它按预期工作:它并行构建 lib1、lib2 和 lib3 并将其链接到 main。
但是,如果我运行make -j4 main lib1
(因此明确说明 main 和 lib1 目标)它会构建 lib1 两次。输出:
[200%] [300%] [300%] [300%] Building CXX object CMakeFiles/lib1.dir/empty.cpp.o
Building CXX object CMakeFiles/lib3.dir/empty.cpp.o
Building CXX object CMakeFiles/lib2.dir/empty.cpp.o
Building CXX object CMakeFiles/lib1.dir/empty.cpp.o
Linking CXX static library liblib1.a
Linking CXX static library liblib3.a
Linking CXX static library liblib2.a
Linking CXX static library liblib1.a
[300%] Built target lib1
[300%] Built target lib1
[ 0%] Built target lib3
Built target lib2
Building CXX object CMakeFiles/main.dir/main.cpp.o
Linking CXX executable main
Built target main
这是正常的吗?为什么 make 没有意识到 lib1 被调用了两次?这是cmake或make中的问题吗?有解决方法或正确的方法吗?这是一个问题吗?