Convert Makefile to CMakeLists, where to start

I searched on inet, but I did not find a clear answer. Could you point me in the right direction how to convert the Makefile to CMakeLists?

I want to do this because I'm new to both makefile and cmake. In my work, CMake is used more, and since I need to start using one of them, I prefer to have everything in CMake. I know that CMake generates a Makefile, but for me, CMake is easier to read than Makefile.

I have the following Makefile:

PREFIX ?= /usr/local

CC = gcc
AR = ar

CFLAGS = -std=gnu99 -fPIC -Wall -Wno-unused-parameter -Wno-unused-function -I. -O4

APRILTAG_SRCS := $(shell ls *.c common/*.c)
APRILTAG_HEADERS := $(shell ls *.h common/*.h)
APRILTAG_OBJS := $(APRILTAG_SRCS:%.c=%.o)
TARGETS := libapriltag.a libapriltag.so 
# LIBS := -Lusr/include/flycapture

.PHONY: all
all: $(TARGETS)
    @$(MAKE) -C example all

.PHONY: install
install: libapriltag.so
    @chmod +x install.sh
    @./install.sh $(PREFIX)/lib libapriltag.so #this should be the line that install the library
    @./install.sh $(PREFIX)/include/apriltag $(APRILTAG_HEADERS)
    @sed 's:^prefix=$$:prefix=$(PREFIX):' < apriltag.pc.in > apriltag.pc
    @./install.sh $(PREFIX)/lib/pkgconfig apriltag.pc
    @rm apriltag.pc
    @ldconfig

libapriltag.a: $(APRILTAG_OBJS)
    @echo "   [$@]"
    @$(AR) -cq $@ $(APRILTAG_OBJS)

libapriltag.so: $(APRILTAG_OBJS)
    @echo "   [$@]"
    @$(CC) -fPIC -shared -o $@ $^

%.o: %.c
    @echo "   $@"
    @$(CC) -o $@ -c $< $(CFLAGS)

.PHONY: clean
clean:
    @rm -rf *.o common/*.o $(TARGETS)
    @$(MAKE) -C example clean

I do not ask you to do your job, but I would like to have some kind of guidance or a good link to look at.

The project contains the programming languages ​​C and C ++.

CMakeLists.txt, . : ADD_LIBRARY librapriltag.a - . CMakeLists.txt

-- Configuring done
CMake Error: Cannot determine link language for target "librapriltag.a".
CMake Error: CMake can not determine linker language for target: librapriltag.a
-- Generating done
-- Build files have been written to: .....

CMakeLists.txt :

project( apriltag2 C CXX)

cmake_minimum_required(VERSION 2.8)

set(CMAKE_C_FLAGS "-std=gnu99 -fPIC -Wall -Wno-unused-parameter -Wno-unused-function -I. -O4")

include_directories("/home/fschiano/Repositories/apriltag2")
include_directories("/home/fschiano/Repositories/apriltag2/common")

add_library( librapriltag.a )

CMakeLists.txt:

project( apriltag2 )

cmake_minimum_required(VERSION 2.8)

set(CMAKE_C_FLAGS "-std=gnu99 -fPIC -Wall -Wno-unused-parameter -Wno-unused-function -I. -O4")

message("CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR}")

file(GLOB apriltag_SRC "*.c")
file(GLOB apriltag_HEADERS "*.h")

set(APRILTAG_SRCS ${apriltag_SRC})
set(APRILTAG_HEADERS ${apriltag_HEADERS})

message(STATUS "CMAKE_CURRENT_LIST_DIR=${CMAKE_CURRENT_LIST_DIR}")

add_library(apriltag STATIC ${APRILTAG_SRCS})

target_include_directories(apriltag PUBLIC ${CMAKE_SOURCE_DIR})
target_compile_options(apriltag PUBLIC -fPIC -Wall -Wno-unused-parameter -Wno-unused-function -O4)

install(TARGETS apriltag
        ARCHIVE DESTINATION lib
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION lib)
install(DIRECTORY CMAKE_CURRENT_LIST_DIR/include/
        DESTINATION CMAKE_CURRENT_LIST_DIR/include/
        FILES_MATCHING PATTERN *.h)

EDIT:

- . - , , -, /home/fschiano/Repositories/apriltag2/common Makefile, , , :

  • ,
  • sudo make install, :

    /usr/local/lib/libapriltag.so /usr/local/include/apriltag/apriltag.h /usr/local/include/apriltag/common/g 2d.h /usr/local/include/apriltag/common/getopt.h /usr/local/include/apriltag/common/homography.h /usr/local/include/apriltag/common/image _f32.h /usr/local/include/apriltag/common/image _u8.h /usr/local/include/apriltag/common/image _u8x3.h /usr/local/include/apriltag/common/matd.h /usr/local/include/apriltag/common/math _util.h /usr/local/include/apriltag/common/pnm.h /usr/local/include/apriltag/common/postscript _utils.h /usr/local/include/apriltag/common/string _util.h /usr/local/include/apriltag/common/svd 22.h /usr/local/include/apriltag/common/thash _impl.h /usr/local/include/apriltag/common/timeprofile.h /usr/local/include/apriltag/common/time _util.h /usr/local/include/apriltag/common/unionfind.h /usr/local/include/apriltag/common/workerpool.h /usr/local/include/apriltag/common/zarray.h /usr/local/include/apriltag/common/zhash.h /usr/local/include/apriltag/common/zmaxheap.h /usr/local/include/apriltag/tag 16h5.h /usr/local/include/apriltag/tag 25h7.h /usr/local/include/apriltag/tag 25h9.h /usr/local/include/apriltag/tag 36artoolkit.h /usr/local/include/apriltag/tag 36h10.h /usr/local/include/apriltag/tag 36h11.h /usr/local/lib/pkgconfig/apriltag.pc /sbin/ldconfig.real:/usr/lib/libstdc++.so.5

.

, Makefile, :

  • cmake.
  • ,
  • sudo make install, :

    ... - : "" - :/usr/local/lib/libapriltag.a

, , CMakeLists.txt !

install.sh .

#!/bin/sh -e
# Usage: install.sh TARGET [RELATIVE PATHS ...]
#
# e.g. ./install.sh /usr/local foo/file1 foo/file2 ...
# This creates the files /usr/local/foo/file1 and /usr/local/foo/file2

TARGETDIR=$1
shift

for src in "$@"; do
    dest=$TARGETDIR/$src
    mkdir -p $(dirname $dest)
    cp $src $dest
    echo $dest
done

?

+4
2

TARGETS := libapriltag.a libapriltag.so, add_library .

, , APRILTAG_SRCS := $(shell ls *.c common/*.c), add_library. , . file (GLOB...). ( , , . GLOB?).

clean CMake.

, . install() .

set(CMAKE_C_FLAGS "blabla") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} blabla").

+5

:

PREFIX ?= /usr/local

, . CMAKE_INSTALL_PREFIX.

CC = gcc
AR = ar

. CMAKE_C_COMPILER CMAKE_CXX_COMPILER .

CFLAGS = -std=gnu99 -fPIC -Wall -Wno-unused-parameter -Wno-unused-function -I. -O4

gcc- . CMAKE_C_COMPILER_ID MATCHES GNU . set(C_STANDARD 98) set(CXX_STANDARD 98).

APRILTAG_SRCS := $(shell ls *.c common/*.c)

, : set(APRILTAG_SRCS ...)

APRILTAG_HEADERS := $(shell ls *.h common/*.h)

, : set(APRILTAG_HEADERS ...). , ( , Visual Studio ).

APRILTAG_OBJS := $(APRILTAG_SRCS:%.c=%.o)

. .

TARGETS := libapriltag.a libapriltag.so 
# LIBS := -Lusr/include/flycapture

add_library:

add_library(apriltag ${APRILTAG_SRCS})
target_include_directories(apriltag PUBLIC ${CMAKE_CURRENT_LIST_DIR}/include/apriltag)
target_compile_options(apriltag PUBLIC -fPIC -Wall -Wno-unused-parameter -Wno-unused-function -O4)

static shared BUILD_SHARED_LIBS CMake.

.PHONY: all
all: $(TARGETS)
    @$(MAKE) -C example all

. CMake .

.PHONY: install
install: libapriltag.so
    @chmod +x install.sh
    @./install.sh $(PREFIX)/lib libapriltag.so #this should be the line that install the library
    @./install.sh $(PREFIX)/include/apriltag $(APRILTAG_HEADERS)
    @sed 's:^prefix=$$:prefix=$(PREFIX):' < apriltag.pc.in > apriltag.pc
    @./install.sh $(PREFIX)/lib/pkgconfig apriltag.pc
    @rm apriltag.pc
    @ldconfig

CMake :

install(TARGETS apriltag
        ARCHIVE DESTINATION lib
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION lib)
install(DIRECTORY include/
        DESTINATION include/
        FILES_MATCHING PATTERN *.h)

( ) .

libapriltag.a: $(APRILTAG_OBJS)
    @echo "   [$@]"
    @$(AR) -cq $@ $(APRILTAG_OBJS)

libapriltag.so: $(APRILTAG_OBJS)
    @echo "   [$@]"
    @$(CC) -fPIC -shared -o $@ $^

%.o: %.c
    @echo "   $@"
    @$(CC) -o $@ -c $< $(CFLAGS)

.

.PHONY: clean
clean:
    @rm -rf *.o common/*.o $(TARGETS)
    @$(MAKE) -C example clean

. CMake clean.

+1

Source: https://habr.com/ru/post/1662231/


All Articles