Makefile (不是我个人使用的东西,但我知道它对很多人来说都很有用),我不必猜测makeall或makebuild或makepackage或makeclean或只是make或/configure,然后再make-实际上就是cmake../&cmake--build.;

Makefile (不是我个人使用的东西,但我知道它对很多人来说都很有用),我不必猜测makeall或makebuild或makepackage或makeclean或只是make或/configure,然后再make-实际上就是cmake../&cmake--build.;,makefile,cmake,Makefile,Cmake,(不是我个人使用的东西,但我知道它对很多人来说都很有用),我不必猜测makeall或makebuild或makepackage或makeclean或只是make或/configure,然后再make-实际上就是cmake../&cmake--build.;当出现错误时,错误消息实际上是有意义的,更容易配置不同的变体。。。我可以继续。@minidiable在这种情况下,坚持使用CMake。Makefiles在某些情况下很有用,但它们很旧,在过去几十年中没有取得多大进展。CMake将更加直观,即使有


(不是我个人使用的东西,但我知道它对很多人来说都很有用),我不必猜测
makeall
makebuild
makepackage
makeclean
或只是
make
/configure
,然后再
make
-实际上就是
cmake../&cmake--build.
;当出现错误时,错误消息实际上是有意义的,更容易配置不同的变体。。。我可以继续。@minidiable在这种情况下,坚持使用CMake。Makefiles在某些情况下很有用,但它们很旧,在过去几十年中没有取得多大进展。CMake将更加直观,即使有时你不得不与之搏斗。开始阅读文档。明确说明必须指定生成给定库所需的源文件。此外,您不必指定前缀(lib)和扩展名(.a),但您必须指定您的库是静态的还是共享的(例如)。不要老是用新问题修改你的问题,只要问一些相关的新问题就行了。不要使用
GLOB
。CMake将无法检测新添加的文件以自动重新配置您的项目。如果您使用此处提到的
CMake__标志
路由,请确保包括旧规则,除非您打算将其全部覆盖:
set(CMake_标志“${CMake__标志}blablabla”)
。此外,同意@Torbjörn-在CMake中,globbing并不令人惊奇。它的一个缺点。与其设置
CMAKE_C_标志
,我建议为C版本设置,并为其他标志使用请仔细阅读文档。再看一下SO文档和@minidiable,您需要两个库,一个
静态
,一个
共享
。你不必写完整的文件名,前缀
lib
和扩展名应该会自动生成。感谢你花时间回复我,但还是有一些我不明白的地方。我用您的建议更新了CMakeLists.txt,但仍然存在以下错误:CMakeLists.txt处的CMake错误:19(target_include_目录):target_include_目录使用无效参数调用CMakeLists.txt处的CMake错误:20(target_compile_选项):target_compile_options用无效参数调用我将把新的CMakeLists.txt放在原始问题中。我试图放:target_include_目录(apriltag PUBLIC${CMAKE_CURRENT_LIST_DIR}/include/apriltag)target_compile_options(apriltag PUBLIC-fPIC-Wall-Wno unused parameter-Wno unused function-O4)但是它给了我其他的错误。嗨,我还有一些问题。除了安装部件外,所有部件都正常工作。我将编辑我的问题,使之更清楚我还缺少什么。
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
-- 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: .....
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 )
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)
#!/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
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
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)
.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
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