14
プロジェクトでは、Cライブラリをビルドし、Pythonバインディング(GObjectイントロスペクション経由)をCMakeに暗示します。 distutilsを使っていくつかのPythonヘルパーモジュールを配布したいと思っています。私はこのCMakeLists.txt
CMakeをsetup.pyで使用する
find_program(PYTHON "python")
if (PYTHON)
set(SETUP_PY_IN "${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in")
set(SETUP_PY "${CMAKE_CURRENT_BINARY_DIR}/setup.py")
set(DEPS "${CMAKE_CURRENT_SOURCE_DIR}/module/__init__.py")
set(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/build")
configure_file(${SETUP_PY_IN} ${SETUP_PY})
add_custom_command(OUTPUT ${OUTPUT}
COMMAND ${PYTHON}
ARGS setup.py build
DEPENDS ${DEPS})
add_custom_target(target ALL DEPENDS ${OUTPUT})
install(CODE "execute_process(COMMAND ${PYTHON} ${SETUP_PY} install)")
endif()
と、次のsetup.py.in
でモジュールをビルドしてインストールすることができています:
from distutils.core import setup, Extension
if __name__ == '__main__':
setup(name='foo',
version='${PACKAGE_VERSION}',
package_dir={ '': '${CMAKE_CURRENT_SOURCE_DIR}' },
packages=['module'])
残念ながら、ビルドステップは、私がmake
を実行するたびに実行されます。おそらく、問題はファイルではなくディレクトリであるカスタムコマンドの出力に関連していると思います。さて、setup.py.in
またはソースの1つが変更された場合にのみ、python setup.py build
を実行するようにCMakeに指示する方法はありますか?
まさに私が探していたものです。ありがとう。 – matthias