2013-01-15 4 views
9

私は2つの静的ライブラリのうち、共有ライブラリを構築しています。cmakeを使用して特定の場所にコンパイラコマンドライン引数を配置する方法

This answerは、私の静的ライブラリの前に-Wl,--whole-archiveを挿入することです。その後に-Wl,--no-whole-archiveを挿入します。その後、

add_library(wittyPlus SHARED empty.cpp) 
target_link_libraries(wittyPlus 
    ${wtdbosqlite} 
    ${WT_LIBRARIES} 
    ${DB_LIBRARIES} 
    ${Boost_LIBRARIES} 
    app models 
) 

それはappmodels-Wl,--whole-archiveを追加するので、私は必要なもので、それらの後-Wl,--no-whole-archive(よう:

それでは、私は共有ライブラリのため、現時点ではcmakeの中に持っていることです標準ライブラリのインポートは共有ライブラリによってエクスポートされません)。

CMakeでこれを行う最も簡単な方法は何ですか?


追加: cmakeのは親切コンパイラの定義を削除するように、私は可能な限り標準cmakeのものを使用したいのですが、私は窓のために余分な作業を行う必要はありませんその方法は、構築します構築されているプラ​​ットフォームではサポートされていません。

答えて

14

OK、これは私が思ったよりはるかに簡単でした。

のでcmake docsに従って:

項目で始まる名前 ' - ' が、 '-l' または '-framework' ではないが、リンカフラグとして扱わ です。それはWindows上で動作しますかcmakeのはスーパー賢いあるようではない、私はそれが期待場合、私は知らない

add_library(wittyPlus SHARED empty.cpp) 
target_link_libraries(wittyPlus 
    ${wtdbosqlite} 
    ${WT_LIBRARIES} 
    ${DB_LIBRARIES} 
    ${Boost_LIBRARIES} 
    "-Wl,--whole-archive" 
    app models 
    "-Wl,--no-whole-archive" 
) 

だから修正はちょうどにしました。

objdumpで結果を見ると、エクスポートに多くのブーストが含まれているようですが、何か間違っている可能性があります。

objdump -C -t wittyPlus/libwittyPlus.so | grep -i boost 

しかし、私はそれにリンクする必要があるので、それは一歩前進です。

他の回答はまだありがたいです。あなたは静的ライブラリを自分で構築している場合は、このアプローチを使用することができます

CMake: how create a single shared library from all static libraries of subprojects?

+0

null 'empty.cpp'ファイルを必要としない回避策が見つかりましたか? –

+0

いいえ、私はいつもempty.cppを使用しています。 – matiu

+3

実際のソースツリーを迷惑ファイルで汚染したくない場合は、 'file(WRITE empty.cpp" ")'を実行できるようです。 –

0

:基本的に私がやろうとしているが、この質問と同じであるhttps://stackoverflow.com/a/29824424/4069571すなわち、その後、最初のオブジェクトライブラリとしてそれらを構築するリンクそれらをそれぞれの共有ライブラリと静的ライブラリにコピーします。

関連する問題