CMake: CMAKE_AIX_EXPORT_ALL_SYMBOLS 変数で AIX シンボルエクスポートを制御する
CMAKE_AIX_EXPORT_ALL_SYMBOLS
は、CMake のターゲットプロパティ AIX_EXPORT_ALL_SYMBOLS
のデフォルト値を設定する変数です。このプロパティは、AIX 上で生成される共有ライブラリと、ENABLE_EXPORTS
ターゲットプロパティが設定された実行可能ファイルからすべてのシンボルを自動的にエクスポートするかどうかを制御します。
デフォルト値
CMAKE_AIX_EXPORT_ALL_SYMBOLS
のデフォルト値は TRUE
です。つまり、AIX 上で生成される共有ライブラリと実行可能ファイルからすべてのシンボルが自動的にエクスポートされます。
使用方法
CMAKE_AIX_EXPORT_ALL_SYMBOLS
変数は、CMake の CMakeLists.txt
ファイル内で設定できます。以下の例は、この変数を FALSE
に設定し、すべてのシンボルのエクスポートを無効にする方法を示しています。
set(CMAKE_AIX_EXPORT_ALL_SYMBOLS FALSE)
- AIX 上でシンボルをエクスポートする方法の詳細については、CMake のドキュメントを参照してください。
- 特定のシンボルのみをエクスポートしたい場合は、
TARGET_LINK_LIBRARIES
コマンドとPUBLIC_SYMBOLS
オプションを使用することができます。 AIX_EXPORT_ALL_SYMBOLS
ターゲットプロパティは、個々のターゲットレベルで設定することもできます。これは、target_properties()
コマンドを使用して行うことができます。
例
以下の例は、CMAKE_AIX_EXPORT_ALL_SYMBOLS
変数を FALSE
に設定し、mylibrary
という名前の共有ライブラリを生成する方法を示しています。このライブラリは、mysymbol
という名前のシンボルのみをエクスポートします。
set(CMAKE_AIX_EXPORT_ALL_SYMBOLS FALSE)
add_library(mylibrary mysource.c)
target_link_libraries(mylibrary PUBLIC "mysymbol")
サンプル 1: すべてのシンボルをエクスポートする
# CMakeLists.txt
cmake_minimum_required(VERSION 3.17)
project(myproject)
add_library(mylibrary mysource.c)
サンプル 2: 特定のシンボルのみをエクスポートする
# CMakeLists.txt
cmake_minimum_required(VERSION 3.17)
project(myproject)
set(CMAKE_AIX_EXPORT_ALL_SYMBOLS FALSE)
add_library(mylibrary mysource.c)
target_link_libraries(mylibrary PUBLIC "mysymbol")
以下のコードは、target_properties()
コマンドを使用して、mytarget1
という名前のターゲットの AIX_EXPORT_ALL_SYMBOLS
プロパティを FALSE
に設定します。mytarget2
という名前のターゲットは、デフォルトの TRUE
値を使用します。
# CMakeLists.txt
cmake_minimum_required(VERSION 3.17)
project(myproject)
add_executable(mytarget1 mysource1.c)
target_properties(mytarget1 PROPERTIES AIX_EXPORT_ALL_SYMBOLS FALSE)
add_executable(mytarget2 mysource2.c)
- AIX 上でのシンボルエクスポートの詳細については、CMake のドキュメントを参照してください。
- CMake の最新バージョンを使用していることを確認してください。
- 実際のコードは、プロジェクトの要件に応じて変更する必要があります。
TARGET_LINK_LIBRARIES コマンドと PUBLIC_SYMBOLS オプションを使用する
この方法は、特定のシンボルのみをエクスポートしたい場合に有効です。以下の例は、mysymbol
という名前のシンボルのみをエクスポートする mylibrary
という名前の共有ライブラリを生成する方法を示しています。
add_library(mylibrary mysource.c)
target_link_libraries(mylibrary PUBLIC "mysymbol")
個々のターゲットレベルで AIX_EXPORT_ALL_SYMBOLS ターゲットプロパティを設定する
この方法は、プロジェクト内の異なるターゲットで異なるエクスポート設定を使用したい場合に有効です。以下の例は、mytarget1
という名前のターゲットの AIX_EXPORT_ALL_SYMBOLS
プロパティを FALSE
に設定し、mytarget2
という名前のターゲットはデフォルトの TRUE
値を使用する方法を示しています。
add_executable(mytarget1 mysource1.c)
target_properties(mytarget1 PROPERTIES AIX_EXPORT_ALL_SYMBOLS FALSE)
add_executable(mytarget2 mysource2.c)
CMAKE_EXE_LINKER_FLAGS または CMAKE_SHARED_LINKER_FLAGS 変数を使用する
この方法は、すべてのシンボルをエクスポートする必要があるが、CMAKE_AIX_EXPORT_ALL_SYMBOLS
変数をグローバルに設定したくない場合に有効です。以下の例は、すべてのシンボルをエクスポートする mylibrary
という名前の共有ライブラリを生成する方法を示しています。
add_library(mylibrary mysource.c)
set_property(TARGET mylibrary PROPERTY LINKER_LANGUAGE CXX)
set_target_properties(mylibrary PROPERTIES CXX_EXE_LINKER_FLAGS "-Wl,--export-all-symbols")
ハンドコーディングシンボルエクスポート
これは、最も低レベルの方法ですが、最も柔軟性があります。以下の例は、mysymbol
という名前のシンボルをエクスポートする mylibrary
という名前の共有ライブラリを生成する方法を示しています。
add_library(mylibrary mysource.c)
set_property(TARGET mylibrary PROPERTY LINKER_LANGUAGE CXX)
add_custom_command(
TARGET mylibrary
POST_BUILD
COMMAND ${CMAKE_CXX_COMPILER} -Wl,--export-all-symbols -o $<TARGET_FILE_DIR>/mylibrary.symbols $<TARGET_FILE_PATH>
)
最適な方法の選択
使用する方法は、プロジェクトの要件によって異なります。一般的には、TARGET_LINK_LIBRARIES
コマンドと PUBLIC_SYMBOLS
オプションを使用するのが最も簡単で柔軟な方法です。
- AIX 上でのシンボルエクスポートの詳細については、CMake のドキュメントを参照してください。
- CMake の最新バージョンを使用していることを確認してください。
- 実際のコードは、プロジェクトの要件に応じて変更する必要があります。