CMake cannot find OpenSSL on Brew

Viewed 2000

CMake fails to find OpenSSL for me. Brew's OpenSSL is located at /usr/local/Cellar/openssl/1.0.2s/. I'm on macOS Catalina.

My CMakeLists.txt looks like this:

[...]

set(OPENSSL_ROOT_DIR /usr/local/Cellar/openssl/1.0.2s)

find_package(OpenSSL REQUIRED)
target_include_directories(myapp PUBLIC ${OPENSSL_INCLUDE_DIR})
message(STATUS "OpenSSL: Version ${OPENSSL_VERSION}")
message(STATUS "OpenSSL: include dir at ${OPENSSL_INCLUDE_DIR}")
message(STATUS "OpenSSL: libraries at ${OPENSSL_LIBRARIES} ${OPENSSL_SSL_LIBRARIES}")

[...]

target_link_libraries(myapp
        ${CMAKE_DL_LIBS}
        ${OPENSSL_LIBRARIES}
        ${OPENSSL_SSL_LIBRARIES}
        Qt5::Core
        )

Outputs:

-- OpenSSL: Version 1.0.2s
-- OpenSSL: include dir at /usr/local/Cellar/openssl/1.0.2s/include
-- OpenSSL: libraries at /usr/lib/libssl.dylib;/usr/lib/libcrypto.dylib /usr/lib/libssl.dylib

So CMake found the correct include dir, but the libraries were taken from my system's installation of OpenSSL? Even though I specified OPENSSL_ROOT_DIR as per the documentation.

Why can't it find these files?

/usr/local/Cellar/openssl/1.0.2s/lib/libcrypto.a
/usr/local/Cellar/openssl/1.0.2s/lib/pkgconfig/libssl.pc
/usr/local/Cellar/openssl/1.0.2s/lib/pkgconfig/libcrypto.pc
/usr/local/Cellar/openssl/1.0.2s/lib/libssl.dylib
/usr/local/Cellar/openssl/1.0.2s/lib/libcrypto.1.0.0.dylib
/usr/local/Cellar/openssl/1.0.2s/lib/libcrypto.dylib
/usr/local/Cellar/openssl/1.0.2s/lib/libssl.1.0.0.dylib
/usr/local/Cellar/openssl/1.0.2s/lib/libssl.a

If I ignore this, and proceed with compiling my program I get:

ld: cannot link directly with /usr/lib/libcrypto.dylib for architecture x86_64

I tried brew upgrade openssl for what it's worth.

I run CMake from CLion and I include -DCMAKE_BUILD_TYPE=Debug -DCMAKE_PREFIX_PATH=/Users/me/Qt/5.9.7/clang_64

1 Answers

CMake cache was the issue. In CLion, I can properly rebuild/refresh CMake by going to Tools -> CMake -> Reset cache & reload project. After this, the output is:

-- OpenSSL: Version 1.0.2s
-- OpenSSL: include dir at /usr/local/Cellar/openssl/1.0.2s/include
-- OpenSSL: libraries at /usr/local/Cellar/openssl/1.0.2s/lib/libssl.dylib;/usr/local/Cellar/openssl/1.0.2s/lib/libcrypto.dylib /usr/local/Cellar/openssl/1.0.2s/lib/libssl.dylib

Which seems to be correct, and answers my question.

In addition, I had to do: brew switch openssl 1.0.2s to compile correctly.

Related