2012-07-17 92 views
3

我有一個C程序,由一名離開的開發人員傳給我。我正在試圖弄清楚他究竟在幹什麼,並將軟件重新安排成更合乎邏輯的東西,這樣我可以更輕鬆地構建它。我使用CMake來構建,而他正在使用Make。構建C程序(用於CMake構建)的最佳實踐

有一個src /文件夾中有幾個源文件,其中有4個main()方法。帶有main()方法的文件位於更多的文件中,就好像它們是實用程序或工具一樣。這種打擊讓我覺得很奇怪,因爲他還有一個lib文件夾,裏面還有一些其他東西,它們的構建和看起來更像庫。我是否應該將這些主要方法分解爲「驅動程序」源文件,並將這些文件中定義的方法設置爲其他庫?如果我這樣做,我知道如何讓CMake去尋找一個庫,並建立並鏈接到驅動程序執行。

如果在src文件夾中建立這些「庫」源文件是可以接受的,我應該只設置CMake來一次性構建該文件夾中的所有內容,還是應該爲at創建一個目錄結構至少有一些邏輯分離?

就像一個想法,這裏是當前目錄結構

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

它永遠不會太晚的答案,所以我提議:

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整個出口整個項目。

相關問題