Makefile CMake:具有明确目标及其相互依赖关系的并行构建?
我正在使用Makefile CMake:具有明确目标及其相互依赖关系的并行构建?,makefile,cmake,Makefile,Cmake,我正在使用cmake生成GNU make文件,我在基于GCC的环境中使用make执行这些文件。经过几年的使用,现在才意识到我有问题: 假设这是我的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
cmake
生成GNU make文件,我在基于GCC的环境中使用make
执行这些文件。经过几年的使用,现在才意识到我有问题:
假设这是我的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中的问题吗?是否有解决方法或正确的方法?这到底是个问题吗?这是正常的行为。它确实意识到lib1
被调用了两次,但它只是检查lib1
是否已构建
比如说main
它构建了lib1
。但是对于显式指定的lib1
target,它会再次检查是否相同