3

私は、退職した開発者から受け継がれた C プログラムを持っています。私は彼が何をしていたのかを正確に把握し、ソフトウェアをより論理的なものに再編成して、より簡単に構築できるようにしようとしています. 彼は Make を使用していましたが、私は CMake を使用してビルドしています。

1 つの src/ フォルダーにいくつかのソース ファイルがあり、そのうち約 4 つに main() メソッドがありました。main() メソッドを含むファイルは、ユーティリティやツールなどのように名前が付けられたファイルにあります。彼には lib フォルダーもあり、その中にビルドされてライブラリのように見えた他のものがいくつかあるため、この種のことは奇妙に思えます。これらの主要なメソッドを「ドライバー」ソース ファイルに分割し、それらのファイルでも定義されているメソッドを別のライブラリにする必要がありますか? これを行うと、CMake でライブラリを探してビルドし、実行するためにドライバにリンクする方法がわかります。

これらの「ライブラリ」ソース ファイルを src フォルダー内にビルドすることが許容される場合、そのフォルダー内のすべてを一度にビルドするように CMake を設定するか、少なくとも論理的な分離のためのディレクトリ構造を作成する必要があります。 ?

アイデアとして、現在のディレクトリ構造は次のとおりです

project
.../src
......file1.c
......file2.c <-has a main() as well as other methods
......file3.c
......file4.c <- has a main() as well as other methods
......file5.c
.../lib
....../lib1
........./file1.c <-references top level include folder files
........./file2.c
....../lib2
........./file1.c <-refs top level and local include files
........./file2.c
........./file2.h
.../scripts
.../include
.
.
.

このビルドを再構築したり、CMake で構成したりするためのベスト プラクティスに関するアドバイスをいただければ幸いです。

4

1 に答える 1

4

答えに遅すぎることはないので、私は提案します:

project
.../CMakeLists.txt
     include_directories(include/)
     add_subdirectory(lib/lib1)
     add_subdirectory(lib/lib2)
     add_subdirectory(src/)  

.../lib/lib1/CMakeLists.txt
              add_library(lib1 file1.c file2.c)

.../src/CMakeLists.txt
         add_executable(test1 test1.c test2.c)
         target_link_libraries(test1 lib1)

機能する理由:include_directoriesサブディレクトリで派生し、すべてのターゲット (およびライブラリ)add_subdirectoryがプロジェクト全体にエクスポートされます。

于 2012-10-10T10:45:01.483 に答える