Wireshark mailing list archives
Re: CMake for Windows
From: Roland Knall <rknall () gmail com>
Date: Wed, 26 Jun 2013 13:52:54 +0200
Hi In regard to your issue with copying the library to the executable directory, I wrote a little script for my software which ensures, that a library is existent at the same path then the application. I attached the script and the called runner. You call it with: IF ( ( WIN32 OR CYGWIN ) AND ( ${LIB_TYPE} STREQUAL "SHARED" ) ) EnsureLibraries(<YourTargetName> "${ADD_ADDITIONAL_LIBRARIES}" ) ENDIF ( ( WIN32 OR CYGWIN ) AND ( ${LIB_TYPE} STREQUAL "SHARED" ) ) Also, little hint, if you build libraries on Windows, allways use shared. CMake creates the .lib files automatically in such a case. kind regards Roland On Wed, Jun 26, 2013 at 1:31 PM, Graham Bloice <graham.bloice () trihedral com> wrote:
On 26 June 2013 11:29, Graham Bloice <graham.bloice () trihedral com> wrote:On 26 June 2013 11:07, Roland Knall <rknall () gmail com> wrote:Hi GLOB and GLOB_RECURSE should normally only catch files, not directories. (As noted on http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:file)Several references found on Google imply that it did return directories as well despite the docs. My empirical testing seems to show that it doesn't.You should look for ares.h. From the returned path you could deduct the directory path with STRING.I'll try this next.Alternativly you could look on google for Findcares.cmake, which will get you some matches for other people, who attempted the same thing. From there you can either take their hints or create your own version.I'm hacking in the Wireshark copy of that file and all the ones I find on Google are similar. None of them cater for Windows oddities.More problematic is finding the library. But you could either use the built-in function find_library or use the cmake module FindPackageHandleStandardArgs.cmake (Description in the header of the file).Again, it appears that there is nothing in standard CMake to handle the Windows oddities. There is an existing bug/enhancement for CMake to add VPATHS to find_path et al to cater for the version in the path but it hasn't been progressed since 2010. My plan was to work out the path under $(PROJECT_LIB_DIR ) for each library and supply that as HINTS to find_path and find_library. I believe there's another issue as well, on Windows the linker requires access to the import library for linking (e.g. $(PROJECT_LIB_DIR)/c-ares-1.9.1-1-win32ws/lib/libcares-2.lib) and then the dll should be copied to the output directory to load at run-time ($(PROJECT_LIB_DIR)/c-ares-1.9.1-1-win32ws/lib/libcares-2.dll). I haven't worked out how CMake handles the import library yet.Allways try to use as many built-in commands as possible, because even something simple as a little foreach and some paths you set may lead to cross-compilation mayhem in the future.I think all the Windows oddities will have to be wrapped in IF(WIN32) or similar to prevent other breaking CMake on other platforms.This now works for finding the include path, it appears FILE(GLOB) does locate dirs, where I was going wrong was with round braces instead of curly braces when using CMake vars: IF (WIN32) SET(PROJECT_LIB_DIR "W:/Wireshark/wireshark-win32-libs") FILE(GLOB subdir "${PROJECT_LIB_DIR}/*") FOREACH(dir ${subdir}) IF(IS_DIRECTORY ${dir}) IF("${dir}" MATCHES ".*/c-ares-.*") MESSAGE("Found c-ares: ${dir}") SET(CARES_HINTS ${dir}) ENDIF() ENDIF() ENDFOREACH() ENDIF(WIN32) FIND_PATH(CARES_INCLUDE_DIR ares.h HINTS "${CARES_HINTS}/include") Note that I still had to add the "/include" suffix to FIND_PATH. I thought CMake did that automagically. Shouldn't be too hard to make a macro function to do the search for an aribitrary library string. Next is fixing the FIND_LIBRARY. I assume it's looking for the import library to supply to the linker, in this case the library name is .../lib/libcares-2.lib which is different from the unix name and has a version number and a different extension. Graham ___________________________________________________________________________ Sent via: Wireshark-dev mailing list <wireshark-dev () wireshark org> Archives: http://www.wireshark.org/lists/wireshark-dev Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev mailto:wireshark-dev-request () wireshark org?subject=unsubscribe
Attachment:
EnsureLibraries.cmake
Description:
Attachment:
EnsureLibrariesRunner.cmake
Description:
___________________________________________________________________________ Sent via: Wireshark-dev mailing list <wireshark-dev () wireshark org> Archives: http://www.wireshark.org/lists/wireshark-dev Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev mailto:wireshark-dev-request () wireshark org?subject=unsubscribe
Current thread:
- CMake for Windows Graham Bloice (Jun 20)
- Re: CMake for Windows Joerg Mayer (Jun 25)
- Re: CMake for Windows Roland Knall (Jun 26)
- Re: CMake for Windows Graham Bloice (Jun 26)
- Re: CMake for Windows Roland Knall (Jun 26)
- Re: CMake for Windows Graham Bloice (Jun 26)
- Re: CMake for Windows Graham Bloice (Jun 26)
- Re: CMake for Windows Roland Knall (Jun 26)
- Re: CMake for Windows Graham Bloice (Jun 26)