Я пытаюсь скомпилировать сценарии печати в Yarr. Я хочу превратить эти файлы в исполняемые файлы. Вот шаги, которые я выполняю: https://yarr.readthedocs.io/en/latest/rootscripts/#root -скрипты . На самом деле это просто указывает на один шаг, сделанный после клонирования репозитория Yarr.
Я предпринимаю следующие шаги:
- В моем домашнем каталоге:
git clone https://gitlab.cern.ch/YARR/YARR Yarr
cd Yarr
checkout v1.1.1
Получается правильная версия с каталогом печати и скриптами на моем компьютере.
Далее я запустил:
cd plotting
make
Из документации, после запуска make
, Makefile в Yarr/plotting
должен взять все файлы в Yarr/plotting
и вывести их в Yarr/plotting/build
.
Makefile:
# Simple Makefile for multiple executeables + X other files/classes
# Main files .cxx, Classes in .cpp and .h
# Define INCLUDE, LIBS and EXE accordingly
MAKEFLAGS=--warn-undefined-variables
INCLUDE = -I./. $(shell root-config --cflags) -I../src/libFei4/include -I../src/libUtil/include -I../src/libYarr/include -I../src/libSpec/include -I../src/libFe65p2/include
LIBS = $(shell root-config --libs) -L./../build/lib -lYarr
# Define compiler and flags
CXX = g++
CFLAGS = -g -O0 -Wall $(INCLUDE)
LDFLAGS = $(LIBS)
SRC = $(wildcard *.cpp)
TARGET = $(wildcard *.cxx)
OBJ = $(SRC:.cpp=.o)
OOBJ = $(TARGET:.cxx=.o)
EXE = $(TARGET:.cxx=)
all: $(EXE) $(OBJ) $(OOBJ)
%.o: %.cxx $(OBJ)
@$(CXX) -c $(CFLAGS) $< -o $@
@echo "[Compiling] $@"
%.o: %.cpp
@$(CXX) -c $(CFLAGS) $< -o $@
@echo "[Compiling] $@"
%: %.o
@$(CXX) $(CFLAGS) $< $(OBJ) $(LDFLAGS) -o $@
@echo "[Linking] $@"
.PHONY: clean
clean:
rm -f $(OBJ) $(OOBJ)
rm -f $(EXE)
Однако вывод, который я получаю:
Scanning dependencies of target Yarr
Building CXX object <many CXX objects>
Linking CXX static library ../lib/libYarr.a
Scanning dependencies of target testJson
Building CXX object src/CMakeFiles/testJson.dir/tools/testJson.cpp.o
Linking CXX executable ../bin/testJson
Scanning dependencies of target star_test
Building CXX object src/CMakeFiles/star_test.dir/tools/star_test.cpp.o
Linking CXX executable ../bin/star_test
.
.
.
Итак, make
означает , берущий файлы и создающий исполняемые файлы, но это не правильные цели или исполняемые файлы. make
принимает файлы, расположенные в Yarr/src/tools
, встраивает их в объектные файлы, помещает объектные файлы в src/CMakeFiles/
, связывает объектные файлы в исполняемые файлы и помещает исполняемые файлы в plotting/bin
.
I Я не был уверен, почему это могло произойти, пока я снова не посмотрел на Makefile. Похоже, что CMake переопределил Makefile. Его заменили на:
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.17
.
.
.
#=============================================================================
# Target rules for targets named test
# Build rule for target.
test: cmake_check_build_system
$(MAKE) -f CMakeFiles/Makefile2 test
.PHONY : test
# fast build rule for target.
test/fast:
$(MAKE) -f src/CMakeFiles/test.dir/build.make src/CMakeFiles/test.dir/build
.PHONY : test/fast
.
.
.
<The specific targets>
.
.
.
Цели этого файла Makefile - именно те, которые превратились в исполняемые файлы, такие как Yarr
, testJSon
и star_test
. Это те же «объекты для сборки», как если бы я запускал cmake
вместо make
, что еще раз говорит о том, что CMake переопределяет мой Makefile.
Я все удалил и начал много раз. То же самое происходит каждый раз.
Есть идеи, что происходит и как я могу это исправить? Это сводит меня с ума. Любая помощь приветствуется.