4

CMakeは2.8.8で、コンパイル時にOBJECTライブラリタイプが導入されました:add_library(OBJECT)。すべてのクラスを.oファイルにコンパイルできるようにするのは便利な構成ですが、まだライブラリに追加しないでください。

ただし、生成されたmakeファイルのコマンドにどのフラグが付加されるかはわかりません。基本的に、add_library(SHARED)コマンドを実行すると、CMAKE_SHARED_LIBRARY_CXX_FLAGSで指定されたフラグが追加されます。CMAKE_CXX_FLAGS_DEBUGやCMAKE_CXX_FLAGS_RELEASEなどのよりグローバルなフラグに頼ることなく、JUSTOBJECTライブラリのビルドフラグを指定できるようにしたいと思います。そのような旗が存在するか、計画されているかどうか誰かが何か考えを持っていますか?

要約:

# has CMAKE_SHARED_LIBRARY_CXX_FLAGS to set SHARED library build flags
add_library(<lib> SHARED <srcs>)

# Is any environment variable available to set OBJECT library build flags?
add_library(<lib> OBJECT <srcs>)

CMAKE_OBJECT_LIBRARY_CXX_FLAGSのような環境変数がOBJECTビルドフラグを設定することを期待していました。ソース(Modules/SystemInformation.inおよびModules/CMakeCXXInformation.cmake)を調べたところ、OBJECTライブラリに固有のように見えるものは見つかりませんでした。

編集: 具体的には、-fPICをOBJECTライブラリに追加しますが、実行可能ファイルには追加しません。そのため、CMAKE_CXX_FLAGS_*でフラグを指定したくありません。

4

1 に答える 1

4

CMake 2.8.9 以降を使用する場合は、プロパティPOSITION_INDEPENDENT_CODEを使用して、コンパイラに依存しない方法で位置に依存しないコードを有効にします。

add_library(<lib> OBJECT <srcs>)
set_target_properties(<lib> PROPERTIES POSITION_INDEPENDENT_CODE ON)

古いバージョンの CMake では、ターゲットのCOMPILE_FLAGSプロパティを設定できます。OBJECT_LIBRARY

add_library(<lib> OBJECT <srcs>)
set_property(TARGET <lib> PROPERTY COMPILE_FLAGS "-fPIC")
于 2012-07-17T11:13:03.580 に答える