(Shameless plug ahead) If you want to see a working example of what I said above, you can check out my ExampleCMakeProject:
https://github.com/calebwherry/example-cmake-project It is currently being built and tested on TravisCI (Linux + Mac [GGC5 and Clang3.7]) and Appveyor (Windows [VS2015]) and provides a simple example of how to write/structure CMake for cross-platform C/C++ projects. You can ignore the python wrapper if you want, it just makes working with the CMake exe and system builds easier (calculates core counts, creates directories for build, nicer CLI options, etc) since I find the options to CMake to be very... verbose. The POST_BUILD example is here: https://github.com/calebwherry/example-cmake-project/blob/master/src/app/test-app/CMakeLists.txt If you really are looking to get a one-off project working, Decker's recommendation about PATH modification is easiest. It's just not something I think is viable in the long run and doesn't work as an actual solution to the problem if you are trying to solve it for many projects. -Caleb On Mon, Apr 25, 2016 at 9:01 PM, Chaos Zhang <zcsd2...@gmail.com> wrote: > Hi, > > I faced this problem when i try built a shared lib and linked it on > windows. The structure of my project as below: > -test_dir/ > -sub_hello/ > CMakeLists.txt > hello.c > -top/ > main.c > CMakeLists.txt > CMakeLists.txt > > The content of each file: > ①test_dir/CMakeLists.txt: > PROJECT(TESTLIB) > add_subdirectory(sub_hello sub_hello) > add_subdirectory(top top) > > ②test_dir/sub_hello/CMakeLists.txt: > message("message from sub_hello") > add_library(hello_lib SHARED hello.c) > > ③test_dir/top/CMakeLists.txt: > include_directories(../sub_hello) > add_executable(main main.c) > target_link_libraries(main hello_lib) > > ④test_dir/sub_hello/hello.c: > #include <stdio.h> > void HelloFunc() > { > printf("###hello###\n"); > } > > ⑤test_dir/top/main.c: > int main() > { > HelloFunc(); > return 0; > } > > After i cmake this project, generated .sln and .proj files, then i built it > and i get an error in vs: > > Error LNK1104 can't open file "..\sub_hello\Debug\hello_lib.lib" > > In folder ..\sub_hello\Debug\ , there was not a hello_lib.lib existed. > Then i look thorough and found a solution: > > Add "set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS YES)" in file > test_dir/sub_hello/hello.c > > Then i built this solution again, this time it success, and hello_lib.lib > and main.exe was generated. But when i try to run main.exe, an error > occured: "lose hello_lib.dll". And i moved hello_lib.dll into the folder of > main.exe, and it worked well. > > There are two questions i could not figure out: > ①Is this "..\sub_hello\Debug\hello_lib.lib" associates with > "..\sub_hello\Debug\hello_lib.dll"? For windows can not use .dll directly, > and use a .lib to record the .dll's entrance and location. > ②How to solve the problem of main.exe can not find .dll file. > > Best regards, > Chao Zhang > > > > > > -- > View this message in context: > http://cmake.3232098.n2.nabble.com/How-to-link-shared-lib-on-windows-visual-studio-2014-tp7593346.html > Sent from the CMake mailing list archive at Nabble.com. > -- > > 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: > http://public.kitware.com/mailman/listinfo/cmake -- J. Caleb Wherry *Scientific Software Engineer* <http://www.calebwherry.com> http://www.calebwherry.com +1 (615) 708-5651 calebwhe...@gmail.com
-- 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: http://public.kitware.com/mailman/listinfo/cmake