On 19.06.19 12:42, dexter810 wrote:
> cmake_minimum_required(VERSION 3.6)
> project(main CXX C)
> 
> add_executable(main main.cpp)
> 
> set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Iinclude
> -Ibuild/deps/yara/src/yara/libyara/include -Lbuild/src
> -Lbuild/deps/yara/src/yara/libyara/.libs/")
> 
> 
> target_link_libraries (main yaracpp yara pthread ssl crypto)
> 
> 
> But this was not able to link it properly and threw errors that it cannot
> find "yaracpp/yaracpp.h". The references for writing CMakeLists.txt like
> this were: 
> 
> https://stackoverflow.com/questions/43136418/how-to-add-l-ell-compiler-flag-in-cmake
> 
> https://stackoverflow.com/questions/53879422/how-to-set-g-compile-options-in-clion?answertab=oldest#tab-top

Since you don't include the error messages from the compiler, we are
reduced to guessing here:

1) Don't add -I flags to compiler command line by modifying the
CMAKE_CXX_FLAGS directly. Instead, use either the include_directories
command (if you want to specify the include directories for multiple
targets), or the target_include_directories command:

        target_include_directories(main PRIVATE
                include build/deps/yara/src/yara/libyara/include)

2) CMAKE_CXX_FLAGS is used for compiling, not linking. One way to get
the linker command line you want is to change

        target_link_libraries (main yaracpp yara pthread ssl crypto)

to

        target_link_libraries (main
                -Lbuild/src build/deps/yara/src/yara/libyara/.libs
                -lyaracpp -lyara pthread ssl crypto)

However, better practice would be to create import targets for the
libraries you want to use. For example (assuming that yaracpp is a
shared library):

        add_library(yaracpp SHARED IMPORTED)
        set_target_properties(yaracpp PROPERTIES
                IMPORTED_LOCATION 
"build/deps/yara/src/yara/libyara/.libs/libyara.so"
                INTERFACE_INCLUDE_DIRECTORIES 
"build/deps/yara/src/yara/libyara/include")

Then, you simply add yaracpp to your target_link_libraries command and
can skip the target_include_directories command. Even better practice
would be to use the find_library command to find the libyara library -
this way, your CMakelists.txt would also work for non-Unix target
systems like Windows.

For more information, I highly recommend reading the CMake
documentation, particularly
https://cmake.org/cmake/help/v3.15/manual/cmake-buildsystem.7.html
-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake

Reply via email to