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>
不起作用,并且是未解析的头文件包含。
答案 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
。 ${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)
或类似的东西