2016-09-05 19 views
0

古いプロジェクトがあり、古いautotoolsではなくcMakeを使いたいと思います。cmake:include /とlib /ディレクトリをautotoolとしてインストールする方法

古いプログラムは、makeの後に.libsという隠しフォルダの中にlibtest.a、libtest.la、libtest.so.1.0.0などを作成し、make installと入力するとすべてのライブラリをターゲットフォルダ$ TEST_ROOT/lib(環境変数)にイントールします。また、すべての.hファイルを$ TEST_ROOT/includeフォルダにインストールします。

Makefile.amで

:configure.acで

source_list=test1.cpp test2.cpp 
include_HEADERS=test1.h test2.h 
AM_LDFLAGS="-pthread -lm -lrt" 
lib_LTLIBRARIES=libtest.la 
libtest_la_SOURCES=$(source_list) 
libtest_la_LDFLAGS=$(AM_LDFLAGS) -static-libgcc 

、私は上記のコードを作るだろう、なぜ

if test -n "${TEST_ROOT}"; then 
    ac_default_prefix=${TEST_ROOT} 
    includedir=${ac_default_prefix}/include 
fi 

は、率直に言って、私は本当に理解していない、1つの該当する行を参照してください。 a、.la、.soなどのライブラリをまとめて、対応するフォルダにインストールします。おそらくautotoolsは "ac_default_prefix"と "includeddir"を認識できますか?

とにかく、私はcmakeで同じことをしたい、以下は私の試みですが、完全な解決策ではありません。

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/.libs) 
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY $(CMAKE_BINARY_DIR}/.libs) 

set(CMAKE_CXX_FLAGS "-O3 -Wall") 
set(CMAKE_EXE_LINKER_FLAGS "-pthread -lm -lrt") 

file(GLOB SOURCES "*.cpp") 
add_library(test STATIC ${SOURCES}) 

上記のコードではなく、ビルドフォルダ内.LIBSフォルダに(CMAKE_RUNTIME_OUTPUT_DIRECTORYなどが動作しないことを意味する)、buildフォルダにlibtest.aをコンパイルします。

第二に、それだけでlibtest.aを構築し、何libtest.laが存在しない、無libtest.so.1.0.0など

第三に、私はまだ、自動のような仕事をインストールしてみましょうどのように確認していませんツール。ターゲットのインクルードディレクトリとターゲットのlibディレクトリを設定して、すべての.hファイルと.so、.a、.laファイルをターゲットディレクトリにインストールするように設定できますか?

助けてください。

ありがとうございました。

+1

CMakeにはインストールのための特別なコマンド - [install()](https:// cmake)があります。org/cmake/help/v3.0/command/install.html)を参照してください。それについてのドキュメンテーションをチェックしてください、おそらく事は明らかになります。変数 'CMAKE _ * _ OUTPUT_DIRECTORY'は、それぞれがライブラリ/実行可能ファイルの特定の型にのみ影響します。静的ライブラリは[CMAKE_ARCHIVE_OUTPUT_DIRECTORY](https://cmake.org/cmake/help/v3.0/prop_tgt/ARCHIVE_OUTPUT_DIRECTORY.html)の影響を受けます。また、STATICライブラリをビルドする際に、なぜ '.la'と' .so'がビルドされることを期待していますか?現在のところ、あなたの質問には多すぎる副質問があり、そのうちの1つに集中しようとします。 – Tsyvarev

+0

私は、あまりにも多くの副請求主張に完全に同意します。 – steveire

答えて

1

あなたは、対応するCMakeLists.txtに移動し、追加する必要があります。

FILE(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/*.hxx") 
INSTALL(FILES ${files} DESTINATION include) 

あなたも、より多くの例を見つけることができます:あなたがあなたのヘッダファイルをインストールすることができます同様に

SET(CMAKE_INSTALL_PREFIX ".") 

:あなたは、標準のインストールパスを決定することができCMakeLists.txtあなたのルートで

INSTALL(TARGETS test DESTINATION lib) 

at:https://cmake.org/Wiki/CMake:Install_Commands

メイク(https://cmake.org/cmake/help/v3.1/variable/CMAKE_INSTALL_PREFIX.html)を持つファイルとLIBSストール:

make DESTDIR=/home/mistapink install 
1

あなたもCMAKE_ARCHIVE_OUTPUT_DIRECTORYを設定する必要があるかもしれません。

それとは別に、CMakeはautotoolsのように動作しないことに注意してください。複数のライブラリが必要な場合は、複数のadd_libraryコールが必要です。

関連する問題