2011-12-23 9 views
2

私はいくつかのtarget_link_librariesを持っている:cmakeののtarget_link_libraries

Xとのリンクexeファイルとxの依存関係になり
add_library(x x.cc) 
target_link_libraries(x depX1 depX2 depX3) 
add_executable(exe exe.cc) 
target_link_libraries(exe x ${shared_lib1} ${shared_lib2}) 

:depx1、depx2など 問題はshared_libsはxと依存関係の間に挿入されていることですこれはg ++ 4.6では受け入れられません(古いバージョンではうまくいきました)。

修正方法? CMakeLists.txtファイルで指定したのと同じように、コンパイル行の最後に共有ライブラリを置く必要があります。だから私はそれらをインターカレートしたくないので、コンパイルラインの最後にそれらを入れたい。また、depx1、depx2 depx3などは独自の依存関係も持っていることに注意してください。唯一必要なことは、共有ライブラリがコンパイル行の最後に表示されることです。

どのようにcmakeで行うのですか?

のsrc/TargetNameは/ CMakeFiles/TargetName.dir/link.txtリンクです
add_custom_command(TARGET TargetName 
        PRE_LINK COMMAND ${PROJECT_SOURCE_DIR}/custom_script.sh 
        ARGS ${PROJECT_BINARY_DIR}/src/TargetName/CMakeFiles/TargetName.dir/link.txt) 

: おかげ

--LATER EDIT2-- =>これは醜いハックを使用することによって解決することができ を解決しましたコマンドラインCMakeが生成し、custom_script.shはファイルを解析し、コンパイル行の最後にダイナミックリンクライブラリを配置するスクリプトです。

--LATER EDIT-
私は、現在のCMakeと、コンパイル行の最後と終了時に共有ライブラリを置くオプションがないと、すべてが壊れていることを理解しています!これは最高です!

+0

あなたは 'VERBOSEが= 1 'の問題はまさにある見るために作るの出力を示してもらえますか? –

+0

こんにちは、出力は次のようになります:/ usr/bin/C++ -g -O2 -Wall -pthread -static x -shared_lib1 -shared_lib2 depX2 depX3。私はshared_lib1とshared_lib2をコンパイル行の末尾に置いてください。 – FlorinP

+0

'add_library(x STATIC x.cc)'のような静的ライブラリを指定するとどうなりますか?また、 'target_link_libraries'への2つの呼び出しを使用してみてください。一つはx、もう一つは共有ライブラリです。 –

答えて

0

xの依存関係を繰り返してみましたか?例えば:

target_link_libraries(exeファイルX depX1 depX2 depX3 $ {shared_lib1} $ {shared_lib2})

+0

これはオプションではありません。depX1、depX2、depX3にも依存関係があり、維持が困難な非常に長い文字列が生成されるためです。私はすでにそれについて説明しました。 – FlorinP