0

私が使用しているのは、GCC ベースの環境でcmake実行する GNU Makefile を生成するものです。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){} です)

次に、実行cmakemake -j4ます。期待どおりに動作します。lib1、lib2、および lib3 を並行してビルドし、main にリンクします。

ただし、実行するmake -j4 main lib1と (メインと lib1 ターゲットを明示的に指定すると)、lib1 が 2 回ビルドされます。出力:

[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

これは正常ですか?lib1 が 2 回呼び出されたことを make が認識しないのはなぜですか? これはcmakeまたはmakeの問題ですか?回避策または正しい方法はありますか?これはまったく問題ですか?

4

1 に答える 1