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