C++ 将Makefile项目转换为Cmake
我正在学习如何在这个类中使用cmake,但是文档非常冗长和密集。很多教程要么太简单而不实用(cmake只有一个文件),要么太复杂 项目的原始生成文件如下所示:C++ 将Makefile项目转换为Cmake,c++,makefile,cmake,C++,Makefile,Cmake,我正在学习如何在这个类中使用cmake,但是文档非常冗长和密集。很多教程要么太简单而不实用(cmake只有一个文件),要么太复杂 项目的原始生成文件如下所示: # 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-neare
# 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
这个项目是这样组织的
- 克玛克勒恩
- CMakeLists.txt
- 建造
- src
- CMakeLists.txt
- ParseRecord.hpp
- 计时.cpp
- small.dat
- 生成文件
- 分拣机
- 正时
- 实用程序模板.hpp
- ParseRecord.cpp
- 分拣机
- 问题2.cpp
cmake_minimum_required (VERSION 2.6)
project (CMAKETEST)
add_subdirectory(src)
在src dir 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
无论如何你只需要知道太多独立的、武断的事情。在
至少这是我的印象。例如,“添加定义(-std=c99)”。真正地
这个名字会让你想到如何向编译器添加标志吗?及
“集合(VAR a b c)”比VAR=a b c或类似的更直观吗?
在这篇文章上,在CMake上。但我知道CMake正在采取行动
风暴造世界
不过,我真的很想了解和弄明白这一点,所以你能提供的任何帮助都将非常感激和有用。提前感谢。该命令用于构建可执行文件,但您似乎也在尝试使用它来构建对象(.o
)文件。由于您只构建一个可执行文件,因此只需要一个add\u executable
命令:
add_executable(hw1_p2 prob2.cpp ParseRecord.cpp Sorter.cpp Timing.cpp)
您不必在每个子目录中创建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应该可以完成这项工作。谢谢,取得了一些进展,但我发现一个错误,关于prob2有一个问题。上面说找不到图书馆。所以我猜我必须以某种方式将库与cmake链接起来。我尝试了TARGET_LINK_库(prob2 timing.hpp)但没有效果。@harrisonguyen它应该是
\include
而不是
。对不起,这就是我的意思<代码>[25%]生成CXX对象CMakeFiles/hw1_p2.dir/src/prob2.cpp.o/Users/harrison/Documents/cmake/src/prob2.cpp:14:10:致命错误:“未找到scottgs/Timing.hpp”文件#包含^1生成的错误。make[2]:***[CMakeFiles/hw1_p2.dir/src/prob2.cpp.o]错误1 make[1]:***[CMakeFiles/hw1_p2.dir/all]错误2 make:**[all]错误2我将其更改为prob2.cpp中的#include“Timing.hpp”,它似乎正在工作。比makefile短得多,同时适用于许多平台。