2017-10-12 10 views
1

fast-cpp-csv-parserdate 라이브러리를 사용하는 프로젝트에서 작업 중이며 zmq (0mq)를 추가하려고하지만 CMakeList를 작동시키지 못합니다. 여러 라이브러리를 사용할 때 CMakeList에서 target_link_libraries를 구성하는 올바른 방법은 무엇입니까? 연결 라이브러리 오류를 지정할 수 없습니다.

다음

는 작업 CMakeList.txt 경우 : CMakeLists.txt에 추가되어야하는 다음

cmake_minimum_required(VERSION 3.7) 
project(sample_project) 

set(CMAKE_CXX_STANDARD 14) 
set(SOURCE_FILES source/main.cpp include/csv.h include/date.h) 


find_package (Threads) 
add_executable(sample_project ${SOURCE_FILES}) 
target_link_libraries (sample_project ${CMAKE_THREAD_LIBS_INIT}) 

zmq instructions 같이 당 (ZMQ 및 CPPZMQ 이미 설치된). 내가 CMakeLists.txt에 위의 코드를 추가 할 때

find_package(cppzmq) 
if(cppzmq_FOUND) 
    include_directories(${cppzmq_INCLUDE_DIR}) 
    target_link_libraries(sample_project ${cppzmq_LIBRARY}) 
endif() 

, 그것은 다음과 같습니다

cmake_minimum_required(VERSION 3.7) 
project(sample_project) 

set(CMAKE_CXX_STANDARD 14) 
set(SOURCE_FILES source/main.cpp include/csv.h include/date.h) 

find_package(cppzmq) 
if(cppzmq_FOUND) 
    include_directories(${cppzmq_INCLUDE_DIR}) 
    target_link_libraries(sample_project ${cppzmq_LIBRARY}) 
endif() 

find_package (Threads) 
add_executable(sample_project ${SOURCE_FILES}) 
target_link_libraries (sample_project ${CMAKE_THREAD_LIBS_INIT}) 

그리고 다음과 같은 오류가 발생합니다 :

CMake Warning at /usr/local/share/cmake/cppzmq/cppzmqConfig.cmake:44 (find_package): 
    By not providing "FindZeroMQ.cmake" in CMAKE_MODULE_PATH this project has 
    asked CMake to find a package configuration file provided by "ZeroMQ", but 
    CMake did not find one. 

    Could not find a package configuration file provided by "ZeroMQ" with any 
    of the following names: 

    ZeroMQConfig.cmake 
    zeromq-config.cmake 

    Add the installation prefix of "ZeroMQ" to CMAKE_PREFIX_PATH or set 
    "ZeroMQ_DIR" to a directory containing one of the above files. If "ZeroMQ" 
    provides a separate development package or SDK, be sure it has been 
    installed. 
Call Stack (most recent call first): 
    CMakeLists.txt:7 (find_package) 


CMake Error at CMakeLists.txt:10 (target_link_libraries): 
    Cannot specify link libraries for target "sample_project" which is not 
    built by this project. 


-- Configuring incomplete, errors occurred! 
See also "/home/greg/CLionProjects/sample_project/cmake-build-debug/CMakeFiles/CMakeOutput.log". 
See also "/home/greg/CLionProjects/sample_project/cmake-build-debug/CMakeFiles/CMakeError.log". 

[Finished] 

어떻게 제대로 CMakeLists.txt를 사용하여 추가 라이브러리를 추가 ?

+0

문제는 cppzmq가 libzmq를 찾을 수 없다는 것입니다. 아마도 [여기] (https://github.com/zeromq/cppzmq/issues/127)의 제안 중 일부가 도움이 될 수 있습니다. – Mark

답변

2

CMakeLists.txt의 순서를 바꾸어 target_link_librariesadd_executable 뒤에 오도록해야합니다. 예를 들어

: 측면 발언으로

cmake_minimum_required(VERSION 3.7) 
project(sample_project) 

set(CMAKE_CXX_STANDARD 14) 
set(SOURCE_FILES source/main.cpp include/csv.h include/date.h) 

find_package(cppzmq) 
if(cppzmq_FOUND) 
    include_directories(${cppzmq_INCLUDE_DIR}) 
endif() 

find_package (Threads) 
add_executable(sample_project ${SOURCE_FILES}) 
target_link_libraries (sample_project ${CMAKE_THREAD_LIBS_INIT}) 

if(cppzmq_FOUND) 
    target_link_libraries(sample_project ${cppzmq_LIBRARY}) 
endif() 

, 나는 target_include_directories 대신 include_directories의 사용을 권장합니다. 이렇게하면 모든 cppzmq 관련 자료를 하나로 묶을 수 있습니다.

+0

정말 고마워요! 나는 이걸로 머리카락을 꺼내려고했다. 'include_directories' 대신'target_include_directories'를 어떻게 사용합니까? 내가 그것들을 대체 할 때'잘못된 인수 개수로 호출 된 target_include_directory'를 얻습니다. 인수에'sample_project'를 추가하려고 시도했지만'이 프로젝트에 의해 빌드되지 않은'target_project '에 대한 include 디렉토리를 지정할 수 없습니다.' – Greg

+1

@Greg 그것은 f.i입니다. 'target_include_directories (sample_project PUBLIC $ {cppzmq_INCLUDE_DIR})'이 될 수 있습니다. 이 명령은'sample_project'에 대해서만이 디렉토리를 포함 시키길 원하기 때문에이 명령을 좋아합니다. 나중에 정의 될 수있는 다른 타겟을 오염시키지 않을 것입니다. – oLen