【问题标题】:Conversion of Makefile to CMakeMakefile 到 CMake 的转换
【发布时间】:2016-05-12 14:21:37
【问题描述】:

我正在尝试将 Makefile 项目转换为 cmake。

我的项目有一个可执行文件,它被构建并链接到一个内部共享库和一个外部共享库(可执行文件中对两者都有依赖关系)。

这是我的旧 Makefile(通用):

Include = -I$(PROJ_DIRECTORY)/include -I/${EXTERN}/lnInclude
Library = -L$(PROJ_DIRECTORY)/build -lshared  -L$(EXTERN_LIBBIN) -lextern
CPPFLAGS    = -D_GLIBCXX_DEBUG -DProjectRescource=$(PROJ_DIRECTORY)/resources -O0 -g3 -Wall -c -fpermissive -std=c++0x -fPIC -MMD -MP
CCC     = g++
TARGET      = ExecutableName

all: $(TARGET)

clean:
    rm -f $(TARGET).o $(TARGET).d $(TARGET)

$(TARGET) : $(TARGET).o
    $(CCC) -o $(TARGET) $(TARGET).o $(Library) 

$(TARGET).o : 
    $(CCC) $(Include) $(CPPFLAGS) $(TARGET).cpp

这是我对 CMakeLists.txt 的尝试(概括):

include_directories(${PROJECT_SOURCE_DIR}/include/)
add_executable(test1 test1.cpp)
set (CMAKE_CXX_FLAGS "-D_GLIBCXX_DEBUG -DProjectRescource=${PROJECT_SOURCE_DIR}/resources -O0 -g3 -Wall -fpermissive -std=c++0x -fPIC -MMD -MP")
include_directories($ENV{EXTERN_INCLUDE}/lnInclude)
target_link_libraries(test1 "$ENV{EXTERN_LIBBIN}/libextern.so" Project)

当我运行可执行文件时,对包含目录中定义的函数的调用返回 -nan。有谁知道为什么?

【问题讨论】:

  • 可能你忘了libextern_init之类的东西?
  • When I run the executable, calls to functions defined in the include directory return -nan. - 这取决于外部库为什么它的函数返回“-nan”。但我们对那个库一无所知。
  • 检查 stackoverflow.com/questions/15100351/… 以获得正确的编译选项定义。

标签: c++ makefile cmake


【解决方案1】:

问题的原因是共享库的链接顺序。

我可以通过将 CMakeLists.txt 的最后一行更改为:

target_link_libraries(test1 Project "$ENV{EXTERN_LIBBIN}/libextern.so")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2013-09-11
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    相关资源
    最近更新 更多