簡體   English   中英

將Makefile項目轉換為Cmake

[英]Converting a Makefile project to Cmake

我正在學習如何使用cmake這個類,但文檔非常冗長和密集。 許多教程要么太簡單而無法使用(僅使用一個文件進行cmake)或太復雜。

該項目的原始Makefile如下所示:

# Some optimization settings
# see: http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

# Standard all target
all: hw1_p2

# Simple program to do brute-force k-nearest neighbor searches against a signature file
hw1_p2: prob2.o ParseRecord.o Sorter.o Timing.o
        g++ -o hw1_p2 prob2.o ParseRecord.o Sorter.o Timing.o

prob2.o: prob2.cpp utility_templates.hpp
        g++ -Wall -c prob2.cpp

ParseRecord.o: ParseRecord.cpp ParseRecord.hpp utility_templates.hpp
        g++ -Wall -c ParseRecord.cpp

Sorter.o: Sorter.cpp Sorter.hpp
        g++ -Wall -c Sorter.cpp

# Timing class
Timing.o: Timing.hpp Timing.cpp
        g++ -Wall -c Timing.cpp

# Clean code-derived files
clean:
        rm -f *.o hw1_p2 

該項目的組織方式如下

  • cmakelearn
    • 的CMakeLists.txt
    • 建立
    • SRC
      • 的CMakeLists.txt
      • ParseRecord.hpp
      • Timing.cpp
      • small.dat
      • Makefile文件
      • Sorter.cpp
      • Timing.hpp
      • utility_templates.hpp
      • ParseRecord.cpp
      • Sorter.hpp
      • prob2.cpp

到目前為止,從我已經完成的閱讀中我了解到每個目錄中都需要一個CMakelists.txt文件。 構建文件夾在那里,以便我可以進入它並運行cmake ..

在我的頂級CMakelists.txt文件中

cmake_minimum_required (VERSION 2.6)
project (CMAKETEST)
add_subdirectory(src)

在src目錄CMakelist.txt這里是我的嘗試:

include_directories(${CMAKETEST_SOURCE_DIR}/src)
link_directories(${CMAKETEST_BINARY_DIR}/src)

add_executable(hw1_p2 prob2.cpp ParseRecord.cpp Sorter.cpp Timing.cpp)

我甚至不知道從哪里開始。 這個教程的評論幾乎總結了我對cmake和文檔的看法:

不夠詳細,不夠有用。 話雖如此,我還是不喜歡CMake; 你需要知道的太多獨立,隨意的事情。 至少這是我的印象。 比如'add_definitions(-std = c99)'。 真? 這個名稱是否會向您推斷如何向編譯器添加標志? 並且“設置(VAR abc)”比VAR = abc或某些更直觀嗎? Beh在文章上,在CMake上。 但我知道CMake正在風暴中占據構建世界。

盡管如此,我真的很想學習並弄清楚這一點,所以你能提供的任何幫助都會非常感激和樂於助人。 提前致謝。

您不必在每個子目錄中創建cmakelists.txt文件。 對於一個簡單的項目,它應該足以將所有內容放入頂層cmakelists.txt中

cmake_minimum_required (VERSION 2.6)
project (CMAKETEST C CXX)

add_executable(hw1_p2 src/prob2.cpp src/ParseRecord.cpp src/Sorter.cpp src/Timing.cpp)

這個簡單的cmakelists.txt應該完成工作。

add_executable命令用於構建可執行文件,但您似乎也嘗試使用它來構建對象( .o )文件。 由於您只構建一個可執行文件,因此只需要一個add_executable命令:

add_executable(hw1_p2 prob2.cpp ParseRecord.cpp Sorter.cpp Timing.cpp)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM