【发布时间】:2013-09-11 22:09:51
【问题描述】:
我正在学习如何在本课程中使用 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
- 构建
- 源
- CMakeLists.txt
- ParseRecord.hpp
- Timing.cpp
- small.dat
- 生成文件
- 分拣机.cpp
- Timing.hpp
- utility_templates.hpp
- ParseRecord.cpp
- 分拣机.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 和文档的想法:
不够详细,无法使用。话虽如此,我不太喜欢 CMake 反正;你必须知道的太多独立的、任意的事情。在 至少这是我的印象。比如,‘add_definitions(-std=c99)’。真的吗? 该名称是否会突然出现在您如何向编译器中添加标志时?和 'set(VAR a b c)' 是否比 VAR=a b c 或类似的更直观? Beh 在文章和 CMake 上。然而我知道 CMake 正在采取 狂风暴雨般的构建世界。
不过,我真的很想学习并弄清楚这一点,因此您可以提供的任何帮助都将不胜感激。提前致谢。
【问题讨论】: