2009-09-07 16 views
16

が、私はこのようになりますCMakeLists.txtファイルを持っている:オブジェクトファイルをcmakeで一度しかビルドする方法はありますか?

add_executable(exec1 exec1.c source1.c source2.c source3.c) 
add_executable(exec2 exec2.c source1.c source2.c source3.c) 
add_executable(exec3 exec3.c source1.c source2.c source3.c) 

source1.o source2.o source3.oファイルを構築するために、本当に長い時間がかかる、と彼らはすべての実行可能ファイルに共通していることから、私はそれらのそれぞれが一度しか建てられないようにしたい。ただし、cmakeの現在の動作は、それぞれのexecターゲットごとに別々に再構築することです。これは、不要な作業の重複です。

オブジェクトファイルを1回だけ作成するようにcmakeに指示する方法はありますか?などのソースファイルが異なるコンパイラオプションでコンパイルされる可能性があるのでこれは実現するのは難しいだろう

答えて

15

番号、ビルド後のステップ、あなたは何ができるか

は、静的ライブラリにオブジェクトファイルを置くことで、

add_library(mylib STATIC source1.c source2.c) 
add_executable(myexe source3.c) 
target_link_libraries(myexe mylib) 

EDIT:その代わりにとのリンクはもちろん、あなたはにも共有ライブラリにそれを置くことができます。

+3

その方法に注意してください。多くのexesが関わっている場合、共有ライブラリはより面白いかもしれません。http://blog.flameeyes.eu/2008/01/21/what-to-with-with-shared-code – richq

+2

はい、もちろんです。私は、OPがそれぞれの実行可能ファイルにコードを複製したかったと仮定したと思う。 – JesperE

12

はい、CMake 2.8.8では、実際の静的ライブラリや共有ライブラリと同じ組織や依存関係のプロパティを持ち、ディスク上にファイルを生成しない一種の仮想ライブラリであるオブジェクトライブラリを使用できます。 CMakeチュートリアル:Object Libraryを参照してください。

関連する問題