CMake заменяет мой Makefile и создает неправильные исполняемые файлы. Невозможно получить правильные исполняемые файлы - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь скомпилировать сценарии печати в Yarr. Я хочу превратить эти файлы в исполняемые файлы. Вот шаги, которые я выполняю: https://yarr.readthedocs.io/en/latest/rootscripts/#root -скрипты . На самом деле это просто указывает на один шаг, сделанный после клонирования репозитория Yarr.

Я предпринимаю следующие шаги:

  1. В моем домашнем каталоге:

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.

Я все удалил и начал много раз. То же самое происходит каждый раз.

Есть идеи, что происходит и как я могу это исправить? Это сводит меня с ума. Любая помощь приветствуется.

...