Include OpenSSL in a CMakeList.txt file
Asked Answered
M

1

15

I have a question for people who work with CMakeList.txt in C++. I want to use Podofo project (a project to parse & create pdf).

So my main function is simple as:

#include <iostream>
#include <podofo/podofo.h>

int main() {
  PoDoFo::PdfMemDocument pdf;
  pdf.Load("/Users/user/path/to.pdf");

  int nbOfPage = pdf.GetPageCount();

  std::cout << "Our pdf have " << nbOfPage << " pages." << std::endl;
  return 0;
}

My CMakeList.txt is:

cmake_minimum_required(VERSION 3.7)
project(untitled)

set(CMAKE_CXX_STANDARD 14)

set(SOURCE_FILES main.cpp)

add_executable(untitled ${SOURCE_FILES})

But I am stuck with this error:

/usr/local/include/podofo/base/PdfEncrypt.h:44:10: fatal error: 'openssl/opensslconf.h' file not found
#include <openssl/opensslconf.h

I tried to include with find_package, find_library .. setting some variables but I do not find the way.

My env is:

  • macOS
  • Clion
  • Podofo installed via home-brew in /usr/local/podofo
  • OpenSSL installed via home-brew in /usr/local/opt/openssl

Thanks by advance community !!

Mohammed answered 7/8, 2017 at 13:26 Comment(0)
A
30

find_package is the correct approach; you find details about it here.

In your case, you should add these lines:

find_package(OpenSSL REQUIRED)
target_link_libraries(untitled OpenSSL::SSL)

If CMake doesn't find OpenSSL directly, you should set the CMake variable OPENSSL_ROOT_DIR.

Aramenta answered 7/8, 2017 at 14:3 Comment(5)
Yeah that's it !!! Could you just explain me how did you found the syntax "OpenSSL:SSL", why not just "OpenSSL", I would never found that . Now I have another error "ld: symbol(s) not found for architecture x86_64" but it's certainly a small mistakesMohammed
@Mohammed did you look at the FindOpenSSL documentation that was given? These imported target names should always be in there or in the comments of the corresponding FindModule.cmake file. Also, if oLen solved this specific question for you, make sure to mark it as the answer and upvote it.Metalepsis
Oh so my second problem was because I missed "target_link_libraries(untitled podofo)" that line resolve the problem & I am able to buildMohammed
@Aramenta Why not give include_directores or target_include_directories of openssl ?Sulla
@LewisChan It is not necessary, with this syntax target_link_libraries does it for you.Aramenta

© 2022 - 2024 — McMap. All rights reserved.