Я изучаю, как использовать 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
- build
- ЦСИ
- 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 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 так или иначе; слишком много отдельных, произвольных вещей, которые вам просто нужно знать. В по крайней мере, это мое впечатление. Например: add_definitions (-std = c99). В самом деле? Вызывает ли это имя на вас, как добавить флаги в компилятор? А также (VAR a b c) более интуитивно понятный, чем VAR = a b c или некоторые такие? Бег по статье, и на CMake. Тем не менее я знаю, что CMake принимает строить мир штурмом.
Тем не менее, я действительно хочу научиться и понять это, поэтому любая помощь, которую вы можете предоставить, будет очень признательна и полезна. Спасибо заранее.