Moving Headers/Libraries/Executables to specific d

2019-06-07 23:10发布

问题:

I've recently started using CMake for one of my multi-platform projects, but I'm having a little trouble figuring out how to do something.

Basically, inside the project I've got multiple libraries and executables, all in their own folders. I would like to place all of the compiled libraries into one directory on build i.e. a lib folder inside the CMake build folder. I would like to do the same things for the executables.

CMake Build Directory

| ----------> bin (where i want the executables to go)

| ----------> lib (where i want the libraries to go)

| ----------> utils (where the libraries are ordinarily compiled)

| ----------> test (where the executables are ordinarily compiled)

There are directories inside utils and apps for all the different libraries and executables I'm making. I have a CMakeLists in the base folder of my source directory which adds all the subdirectories. If anything does not make sense then feel free to ask.

回答1:

You can also use this:

  set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin )
  set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib )
  set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib )


回答2:

Look at install CMake command.

Here example from that page:

install(TARGETS myExe mySharedLib myStaticLib
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION lib
        ARCHIVE DESTINATION lib/static)
install(TARGETS mySharedLib DESTINATION /some/full/path)

So you can use CMAKE_BINARY_DIR instead /some/full/path



回答3:

In addition, for includes:

install( FILES ${HEADERS} DESTINATION inc )

[when set of header files to be installed]

install( DIRECTORY include/${PROJECT_NAME}/ DESTINATION inc)

[when header directory to be installed]

More Info



标签: cmake