我正在学习如何在此类中使用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文件。
    build文件夹在那里,所以我可以进入它并运行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和文档的看法:



    不过,我真的很想学习并找出答案,因此您所能提供的任何帮助将不胜感激和帮助。提前致谢。

    最佳答案

    add_executable 命令用于构建可执行文件,但是您似乎也在尝试使用它来构建目标(.o)文件。由于您仅构建一个可执行文件,因此只需要一个add_executable命令:

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

    关于c++ - 将Makefile项目转换为Cmake,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18680977/

    10-13 00:06
    查看更多