Cmake - 更改lib和include目录用于外部项目和正确链接的位置

时间:2015-04-14 04:11:06

标签: c cmake

cmake_minimum_required(VERSION 3.2.1 FATAL_ERROR)
project("soxy")

add_definitions(-std=c99)

include_directories(soxy)

# Includes
include(ExternalProject)

ExternalProject_Add(
    LibUV
    GIT_REPOSITORY "https://github.com/libuv/libuv.git"
    GIT_TAG "v1.4.2"
    CONFIGURE_COMMAND sh <SOURCE_DIR>/autogen.sh && ./configure --prefix=${CMAKE_CURRENT_SOURCE_DIR}
    PATCH_COMMAND ""
    BUILD_COMMAND "make"
    BUILD_IN_SOURCE 1
    PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/build
)

set( SOXY_SRC src/file_utils.c
     src/http_parser.c
     src/http_request.c
     src/path_utils.c
     src/string_utils.c
)

set( SOXY_HDR src/debug.h
     src/file_utils.h
     src/http_client.h
     src/http_parser.h
     src/http_request.h
     src/logger.h
     src/path_utils.h
     src/soxy_constantsh
     src/soxy.h
     src/string_utils.h
)

set( SOXY_BIN src/soxy.c )

add_executable(soxy ${SOXY_BIN})
add_dependencies(soxy LibUV)

项目结构:     /soxy     /soxy/CMakeLists.txt     /soxy/build/

当我构建makefile并运行make时,外部项目的lib和include最终在/ soxy中,我希望它们显示在/ soxy / build /中,当它构建我的项目时它不会设置包含权限,使#include <uv.h>不起作用,并且是未解析的头文件包含。

2 个答案:

答案 0 :(得分:0)

您正在使用--prefix=${CMAKE_CURRENT_SOURCE_DIR}。请尝试使用CMAKE_CURRENT_BINARY_DIR

答案 1 :(得分:0)

嗯,你错了几件事。

  • 您通常不需要定义头文件列表。
  • 您没有告诉任何地方编译SOXY_SRC变量中包含的文件。例如,如果你做add_executable(soxy ${SOXY_BIN} ${SOXY_SRC})
  • ,你可以编译它们
  • add_dependencies之后,您还需要target_link_libraries
  • 你应该瞄准&#34;来源&#34;建立。也就是说,你不应该有像${CMAKE_CURRENT_SOURCE_DIR}/build
  • 这样的东西

所以,试试以下内容(我不知道ExternalProject_Add命令,所以我只能猜测行为)。像这样修改两行ExternalProject_Add

BUILD_IN_SOURCE 0
PREFIX ${CMAKE_BINARY_DIR}/LibUV

并添加:

include_directories(${CMAKE_BINARY_DIR}/LibUV)

您可能也需要

link_directories(${CMAKE_BINARY_DIR}/LibUV)

理想情况下,LibUV的include目录与库目录不同,请查看 ExternalProject_Add有效执行的操作。

如前所述,根据生成的库名称,您可能需要target_link_libraries(soxy uv)或类似的东西