私が使用しているのは、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){} です)
次に、実行cmake
しmake -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の問題ですか?回避策または正しい方法はありますか?これはまったく問題ですか?